Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
11-1130966214
NORDmen
2005-11-03 00:16
2006.07.30
run-time packages&amp;kol


2-1152009047
Zilog
2006-07-04 14:30
2006.07.30
Как преобразовать 48-битное число?


2-1152788121
rra
2006-07-13 14:55
2006.07.30
Определение нажатой кнопки


15-1151075086
Megabyte
2006-06-23 19:04
2006.07.30
Ускорение запросов


1-1150884526
eugenemail1970
2006-06-21 14:08
2006.07.30
Нужно модернизировать TBarSeries