Главная страница
    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.011 c
1-1150458026
Вася123
2006-06-16 15:40
2006.07.30
Автоматическое увеличение высоты ячеек в StirngGrid е


2-1152779489
Timur
2006-07-13 12:31
2006.07.30
из Delphi на e-mail


3-1148383580
vigo_
2006-05-23 15:26
2006.07.30
Вопрос по компоненте TSimpleDataSet


2-1152699659
NBU
2006-07-12 14:20
2006.07.30
Как правильно написать файл *.rtf для создания Help?


2-1152273788
Santik
2006-07-07 16:03
2006.07.30
Цикл по времени





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