Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1099031346
NewDelpher
2004-10-29 10:29
2004.11.14
Как правильно дождаться завершения потока?


3-1097645176
Slider007
2004-10-13 09:26
2004.11.14
Блокировка записи


4-1097055635
3fc
2004-10-06 13:40
2004.11.14
Вывод текста под углом средствами WinAPI


14-1098986853
Луарвик
2004-10-28 22:07
2004.11.14
"Хрендопрешь" - игра!


14-1098814791
Rouse_
2004-10-26 22:19
2004.11.14
Саунд трек к "Бар Гадкий Койот"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский