Главная страница
    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.042 c
14-1117204178
Сатир
2005-05-27 18:29
2005.06.29
У кого есть фотка команды Microsoft 78-го года ?


14-1117599792
12DFBDDh
2005-06-01 08:23
2005.06.29
Техничесоке задание


3-1116222174
Sergo
2005-05-16 09:42
2005.06.29
Zip в BLOB-поле


4-1114577414
Леприкон
2005-04-27 08:50
2005.06.29
Handle процесса который запустил мой процесс


3-1116565491
Peter_cc
2005-05-20 09:04
2005.06.29
тип поля DATE





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