Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

обьясните что за глюк??   Найти похожие ветки 

 
Fl@sh ©   (2006-07-02 20:28) [0]

r:real
stop := 128;
r := 0.04;

while (frac(r)<>0.0) and (stop>0) do
begin
result := result + trunc(r*16);
r := frac(r*16);
dec(stop);

end;

результаты циклов..
result = 0.04
0.64
0.24
0.0839999 {почему??? Должно же быть 0,84 = 0,24*16}
как исправить??
Самое главное через несколько итераций результат вообще стает 0!!!
Подскажите пожалуйста


 
Ketmar ©   (2006-07-02 20:36) [1]

учить матчасть. на тему представления чисел с плавающей запятой. и точности этого представления.

вкратце: исправить путём избавления от таких чисел. только целые.


 
Fl@sh ©   (2006-07-02 20:37) [2]

а  мне надо такие!! я серьезно!
как избавиться чтоб результат не ставал 0,08399999 а был 0,84


 
[wl] ©   (2006-07-02 20:46) [3]

можно перейти в fixed point - числам, как в игре doom (как и предлагает Ketmar), тем более, что у тебя не требуется высокая точность после запятой.


 
Ketmar ©   (2006-07-02 20:51) [4]

>Fl@sh ©   (02.07.06 20:37) [2]
чтобы "не ставал", надо язык учить и словари читать. после этого перечитывать ответы и медитировать до осознания себя всего лишь пылинкой в великом колесе Кармы.


 
fl@sh ©   (2006-07-02 20:55) [5]

Блин, ощущение как будто здесь только пинать умеют!
Просил же помощи


 
Ketmar ©   (2006-07-02 21:11) [6]

блин, ощущение такое, что сюда только малолетние неграмотные наглецы приходят. учились же в школе!


 
vidiv ©   (2006-07-03 03:58) [7]


> 0,08399999 а был 0,84

0,0839999(9) а был 0,84
из курса алгебры известно что это одно и то же число :)


 
Джо ©   (2006-07-03 04:15) [8]

> [7] vidiv ©   (03.07.06 03:58)
> 0,0839999(9) а был 0,84
> из курса алгебры известно что это одно и то же число :)

Наверное, мне какую-то другую алгебру преподавали :)


 
ЮЮ ©   (2006-07-03 04:33) [9]


> 0,0839999(9) а был 0,84

вместо real используй Double


 
vidiv ©   (2006-07-03 04:50) [10]


> Джо ©   (03.07.06 04:15) [8]

Упс... ошибочка... имел ввиду 0.84 и 0.839(9), а не 0.0839(9).


 
icWasya ©   (2006-07-03 09:48) [11]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
Ketmar ©   (2006-07-03 10:34) [12]

>ЮЮ ©   (03.07.06 04:33) [9]
да хоть Extended. всё равно точность теряется.


 
For kaif   (2006-07-03 10:46) [13]

Упс... ошибочка... имел ввиду 0.84 и 0.839(9), а не 0.0839(9).

Это не ошибка. 0.839(9)=0.839999999(9).


 
jack128 ©   (2006-07-03 10:52) [14]

ЮЮ ©   (03.07.06 4:33) [9]
вместо real используй Double

по умолчанию - это одно и тоже.  Да и не по умолчанию - принципиальных различий нету..


 
Ketmar ©   (2006-07-03 10:53) [15]

>For kaif   (03.07.06 10:46) [13]
%-)
0.8 и 0.08 %-))


 
ЮЮ ©   (2006-07-03 11:02) [16]

>да хоть Extended. всё равно точность теряется.
На Extended будет точно
0,84
Правда дальше вылезет 0,0399999999999991 :)

Самое главное через несколько итераций результат вообще стает 0!!!
Не результат, а дробная составляющая. И что здесь странного, что сумма нскольких чисел оказалось целым?


 
Amoeba ©   (2006-07-03 11:27) [17]

Автору вопроса читать эту статью (повторяю ссылку из[11]) до полного просветления:

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
Еж ©   (2006-07-03 12:55) [18]

if r=0.0839999 then r:= 0.084 !!!


 
SergP ©   (2006-07-03 21:53) [19]

> вместо real используй Double


Лучше currency. ИМХО


 
evvcom ©   (2006-07-04 08:40) [20]

> [18] Еж ©   (03.07.06 12:55)

Ё-мАё! Просветил ты нас, а мы не знали! Оказывается всё так просто! Такое элегантное решение! :-)))))


 
Desdechado ©   (2006-07-04 11:29) [21]

Еж ©   (03.07.06 12:55) [18]
Сравнение чисел с плавающей точкой на точное равенство фактически всегда даст False.
А вот с фиксированной точкой - другое дело.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1151425083
Джо
2006-06-27 20:18
2006.07.30
Этот сайт в "облегченной" версии для моб. устройств


2-1152352938
Grotesque
2006-07-08 14:02
2006.07.30
Progressbar


2-1152179578
Crazy monkey
2006-07-06 13:52
2006.07.30
Как добавить данные в dblistbox?


6-1142508826
antoxa2005
2006-03-16 14:33
2006.07.30
Подскажите, а как читать HTML страницу? Как текстовый файл много


6-1142864696
Alex_Delphi
2006-03-20 17:24
2006.07.30
Как програмно загрузить(передать) данные из FTP сервера





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