Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Пролема с преобразованием типов...   Найти похожие ветки 

 
Pavlik_Morozov   (2004-10-27 13:29) [0]

Уважаемые господа!
Проблема следующая:
при сложении чисел
 (-3822137.5) + (-0.10067)
типа Single в MyFunc(...) у меня остаётся число
 (-3822137.5)
то есть результат не меняется, хотя внутренняя функция DoOperation(...) возвращает нужное (-3822137.60067)!

Я достаточно давно пишу на Дельфи, но подобной проблемы раньше не встречал, ниже я сгенерил код, имитирующий проблему в моей программе.
ЗАМЕЧАНИЕ: на входе и выходе функции MyFunc(...) обязательно должны быть переменные типа Single.
Помогите пожалуйста!!!
Заранее благодарен...


function TForm1.MyFunc(const ASingleValue1, ASingleValue2:
 Single): Single;
type
 TMyOperation = (opAddition, opMultiplication);

 function DoOperation(AMyOp: TMyOperation): Extended;
 begin
   case AMyOp of
     opAddition:
       Result := ASingleValue1 + ASingleValue2;
     opMultiplication:
       Result := ASingleValue1 * ASingleValue2;
   end;    
 end;
begin
 Result := DoOperation(opAddition);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(FloatToStr(MyFunc(-3822137.5, -0.10067)));
end;


 
MBo ©   (2004-10-27 13:43) [1]

Такой уж это ограниченный тип Single - ты складываешь значения, различающиеся примерно на 8 десятичных порядков, или на 24 двоичных, а мантисса Single содержит только 23 бита.


 
Johnmen ©   (2004-10-27 13:47) [2]

-3822137.60067 в single ну  никак не ложится :)))


 
Pavlik_Morozov   (2004-10-27 13:51) [3]

Не совсем понял... у меня же здесь в принципе есть "готовый" Extended результат:
 (-3822137.60067)
тот, что возвращает DoOperation. Почему у меня в Single не записывается, хотя-бы (-3822137.6)?
И, вообще, может есть способ каким-то образом "записать" этот полученный Extended в возвращаемый Single?


 
Amoeba ©   (2004-10-27 13:55) [4]

Тебе уже 2 человека ответили, что НЕТ.


 
Johnmen ©   (2004-10-27 13:59) [5]

>Почему у меня ....

Да ты просто F1 притопи на Extended и/или Single
и здесь почитай
http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/reals.htm


 
Pavlik_Morozov   (2004-10-27 14:00) [6]

ok, спасибо...


 
Digitman ©   (2004-10-27 14:01) [7]


> Pavlik_Morozov



> на входе и выходе функции MyFunc(...) обязательно должны
> быть переменные типа Single


дурь.

число 0.10067 не представимо в формате Single, разрядности мантиссы не достаточно


 
Pavlik_Morozov   (2004-10-27 14:08) [8]


> Digitman
> дурь.
> число 0.10067 не представимо в формате Single, разрядности
> мантиссы не достаточно

читай справку Delphi:
точность типа Single – 7-8 десятичных разрядов, так что уж 0.10067 точно "влезет"


 
Pavlik_Morozov   (2004-10-27 14:11) [9]

Johnmen

спасибо за ссылку - интересная инфа!


 
Defunct ©   (2004-10-27 14:16) [10]

> Digitman ©   (27.10.04 14:01) [7]

2^24 покроет (dec 10067) запросто.

или я не понял о чем речь.


 
Johnmen ©   (2004-10-27 14:17) [11]

>Digitman ©   (27.10.04 14:01) [7]

Серега, ты погорячился...:)


 
Anatoly Podgoretsky ©   (2004-10-27 14:30) [12]

3822137 это как раз разрядность Single, на дробное просто не остается места


 
Pavlik_Morozov   (2004-10-27 14:37) [13]

...это да, но, блин, до сих пор не въеду (даже прочитав статью, указанную по ссылке) почему у меня всё же на выходе
 (-3822137.5),
а не
 (-3822137.6)?
:)))

0.5 - это что, типа "мусор" что-ли?


 
Anatoly Podgoretsky ©   (2004-10-27 14:44) [14]

Число -3822137.6 не возможно представить, масимально близкое число это -3822137.5


 
Pavlik_Morozov   (2004-10-27 14:49) [15]

ok, понятно...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
11-1082642241
Max Kozlov
2004-04-22 17:57
2004.11.14
проблема с ActiveKOL, точнее с KOLComObj


3-1097979108
Andrew Tsib
2004-10-17 06:11
2004.11.14
Как обр. ошибку ввода пол-ем двух один-х значен индексного поля


14-1098703907
Dimedrol
2004-10-25 15:31
2004.11.14
Windows XP Professional 64-bit Edition


1-1099373901
NewDelpher
2004-11-02 08:38
2004.11.14
Жуткие глюки Delphi7 в Windows 2003


14-1099058767
Knight
2004-10-29 18:06
2004.11.14
МиниЛинух... только роутер или можно почту и web прикрутить?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский