Главная страница
    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.035 c
1-1099026696
BillyJeans
2004-10-29 09:11
2004.11.14
PopupMenu у Edit ов...


3-1098116219
panov
2004-10-18 20:16
2004.11.14
Перенос базы на другой носитель.


14-1098879075
Pentium133
2004-10-27 16:11
2004.11.14
Было на одном форме...


1-1099239142
Piero
2004-10-31 19:12
2004.11.14
Проблемма с собственным классом


4-1096901315
bgs
2004-10-04 18:48
2004.11.14
Добавить пользователя в вин 2000 средствами делфи





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