Главная страница
    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.043 c
3-1116125866
Lex_!
2005-05-15 06:57
2005.06.29
Поиск по БД


3-1115963757
Lex_!
2005-05-13 09:55
2005.06.29
Связывание нескольких таблиц по полю.


1-1118069185
~Игорь~
2005-06-06 18:46
2005.06.29
EDIT- таблица WORD - Уникальность записи


4-1114770645
Sour Smile
2005-04-29 14:30
2005.06.29
Работа с сетью из-под сервиса


3-1116153138
Layner
2005-05-15 14:32
2005.06.29
Как отловить событие возникающее при редактировании в гриде





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