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

Вниз

Занимательные наблюдения над плавающей запятой   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2005-06-04 13:36) [0]

procedure TForm1.Button1Click(Sender: TObject);
var
 A1:Single;
 A2:Single;
 b1:Double;
 b2:Double;
 c1:Extended;
 c2:Extended;
 i:Integer;
begin
 A1:=0;
 A2:=0.02;
 B1:=0;
 B2:=0.02;
 c1:=0;
 c2:=0.02;
 Label13.Caption := FloatToStr(A2);
 Label14.Caption := FormatFloat("0.0000000000000000000",a2);
 Label15.Caption := FloatToStr(b2);
 Label16.Caption := FormatFloat("0.0000000000000000000",b2);
 Label17.Caption := FloatToStr(c2);
 Label18.Caption := FormatFloat("0.0000000000000000000",c2);
 Application.processmessages;

 for i := 1 to 1000000000 do a1:=a1+a2;
 Label1.Caption := FloatToStr(A1);  //!!!
 Label2.Caption := FormatFloat("0.000000000000",A1);  //!!!
 Label3.Caption := FloatToStr(A2*1000000000);
 Label4.Caption := FormatFloat("0.0000000000",A2*1000000000);
 Application.processmessages;

 for i := 1 to 1000000000 do b1:=b1+b2;
 Label5.Caption := FloatToStr(B1);
 Label6.Caption := FormatFloat("0.000000000000",b1);
 Label7.Caption := FloatToStr(b2*1000000000);
 Label8.Caption := FormatFloat("0.0000000000",b2*1000000000);
 Application.processmessages;

 for i := 1 to 1000000000 do c1:=c1+c2;
 Label9.Caption := FloatToStr(C1);
 Label10.Caption := FormatFloat("0.000000000000",c1);
 Label11.Caption := FloatToStr(c2*1000000000);
 Label12.Caption := FormatFloat("0.0000000000",c2*1000000000);
 Application.processmessages;
end;


 
Ученик   (2005-06-04 13:58) [1]

>Anatoly Podgoretsky ©   (04.06.05 13:36)  
Какой будет совет ?


 
Anatoly Podgoretsky ©   (2005-06-04 13:59) [2]

Ну какой может быть совет для плавающией запятой :-)
Только вот смущает ошибка для Single


 
Ученик   (2005-06-04 14:07) [3]

>Anatoly Podgoretsky ©   (04.06.05 13:59) [2]
Поддержка Single, наверно, все-таки стратегическая ошибка :-)


 
Anatoly Podgoretsky ©   (2005-06-04 14:45) [4]

Неприятная такая ошибка, аж в 40 раз :-)
Ну а остальное демонстирурует не эквивалентность операций, кроме того демонстрируется и проблема с 0,02 данное число невозможно точно представить, а тест для Extended как бы пока обратное. Это ошибка преобразования в символьное представление.


 
Defunct ©   (2005-06-04 20:46) [5]

А можно результаты сразу привести, а то собирать программу с 12-ю лэйблами, честно говоря, и не в обиду будет сказано, - лениво. ;>


 
KilkennyCat ©   (2005-06-04 21:10) [6]


> [5] Defunct ©   (04.06.05 20:46)

с 12-ю, как же... :)


 
Anatoly Podgoretsky ©   (2005-06-04 21:59) [7]

Ну все за исключением Sun(Single) равны примерно 20 000 000, а эта примерно 500 000.


 
Anatoly Podgoretsky ©   (2005-06-04 22:00) [8]

Строки помечены !!! - но это так побочный эффект, цель былп продемонстрировать ошибки расчетов с плавающей запятой.


 
IUnKnouwn   (2005-06-04 22:16) [9]

Прикольно :).
Вот и думай после этого как поведет себя какая нить переменная, намечается вопрос о правильность работы самой дельфи



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

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

Наверх




Память: 0.46 MB
Время: 0.036 c
1-1118049202
ORMADA
2005-06-06 13:13
2005.06.29
Поймать TImage под курсором


14-1117699904
REA
2005-06-02 12:11
2005.06.29
А хорошо ли это?


3-1116318754
ANB
2005-05-17 12:32
2005.06.29
Как указать сортровку при апдейте в Оракле ?


4-1115378145
shein
2005-05-06 15:15
2005.06.29
Как проверить имя польз-ля/пароль в домене WinNT?


1-1118222933
Ярослав
2005-06-08 13:28
2005.06.29
Сохранить файл в Unicode





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