Форум: "Прочее";
Текущий архив: 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