Форум: "Основная";
Текущий архив: 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.043 c