Главная страница
    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.04 c
1-1117524040
BKV
2005-05-31 11:20
2005.06.29
Приложение в сервис.


1-1117615189
Yandexman
2005-06-01 12:39
2005.06.29
Работа с потоком


14-1117571809
NailMan
2005-06-01 00:36
2005.06.29
Любитенлям Star Wars


3-1116306936
GydruS
2005-05-17 09:15
2005.06.29
Уважаемые мастера, почему падает БД Paradax с сообщением "Corr...


3-1116516514
_Вован
2005-05-19 19:28
2005.06.29
Как создать таблицу dbf с помощью команд Local SQL BDE ?





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