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

Вниз

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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1116317350
pavel_guzhanov
2005-05-17 12:09
2005.06.29
Как определить, на каком столбце в DBGrid щелкнули мышью


1-1118307829
YoungPioneer
2005-06-09 13:03
2005.06.29
как узнать видимую часть Canvas (DC)


1-1118056674
Gear
2005-06-06 15:17
2005.06.29
TreeView открытое.


14-1117621158
Сергей Т.
2005-06-01 14:19
2005.06.29
Меню в программе


1-1118309239
Nad89
2005-06-09 13:27
2005.06.29
Удаление динамического компонента