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

Вниз

RoundTo(1.245,-2)=1.25 а RoundTo(1.345,-2)=1.34 в чем подвох?   Найти похожие ветки 

 
MOleg   (2002-06-24 16:59) [0]

Люди добрые помогите! В чем причина?


 
MBo   (2002-06-24 17:02) [1]

в ограниченной точности представления вещественных чисел
на www.delphikingdom.com есть статья


 
MOleg   (2002-06-24 17:06) [2]

А можно как-то побороть эту «ограниченность»?
Или только ручками писать правела округления?


 
Anatoly Podgoretsky   (2002-06-24 17:20) [3]

Одно из чисел у тебя не x.xx5000000000000


 
MOleg   (2002-06-24 17:23) [4]


> Anatoly Podgoretsky © (24.06.02 17:20)
> Одно из чисел у тебя не x.xx5000000000000

Да в том-то все и дело, что я просто набираю RoundTo(1.245,-2) и RoundTo(1.345,-2), (это я начал копаться) , а в результате мне выдается такая фигня.



 
Wizard_Ex   (2002-06-24 17:27) [5]

Вообче есть еще математическое округление
если перед пятеркой четное - то округляется до него
если нет то как обычно
вроде так
вышка однако


 
kull   (2002-06-24 17:30) [6]

Это просто банковское округление, а не математическое.


 
Anatoly Podgoretsky   (2002-06-24 17:37) [7]

MOleg © (24.06.02 17:23)
Присвой эти константы переменным и посмотри именно отладчиком, именно им а не функцией вывода на экран, тогда сразу поймешь и заюудешь про округление чисе с плавающей запятой, они не фиксированной точкой


 
MOleg   (2002-06-24 17:39) [8]


> Это просто банковское округление, а не математическое.

Ребята а вы о чем?


 
Anatoly Podgoretsky   (2002-06-24 17:42) [9]

Так вариантов округления много, в четную, нечетную, к большему, к меньшему


 
MOleg   (2002-06-24 17:47) [10]


> Anatoly Podgoretsky © (24.06.02 17:42)
> Так вариантов округления много, в четную, нечетную, к большему,
> к меньшему

Нет, это понятно.
Я в смысле: почему от перемены числа меняется результат, метод-то не меняется.


 
Anatoly Podgoretsky   (2002-06-24 17:51) [11]

Ты выполнил проверку с помощью отладчика?


 
MOleg   (2002-06-24 17:57) [12]

Когда я дошел до команды fmul, то понял, что мне нечего там шукать. Буду писать ручками. :(


 
Anatoly Podgoretsky   (2002-06-24 18:06) [13]

Какой команды, речь шла о том, что бы ты посмотрел истинное значение переменных в отладчике, а не код


 
MOleg   (2002-06-24 18:16) [14]

Это что-то типа:
Mov[ebp-$08],$1eb851ec
Mov[ebp-$04],$3ff3eb85
Да?


 
MOleg   (2002-06-24 18:38) [15]


> MBo © (24.06.02 17:02)
> в ограниченной точности представления вещественных чисел
> на www.delphikingdom.com есть статья

Спасибо за ссылку, прочитал ( http://delphi.vitpc.com/helloworld/reals.htm).
Все встало на свое место.
Отдельное спасибо Anatoly Podgoretsky


 
Anatoly Podgoretsky   (2002-06-24 18:46) [16]

MOleg © (24.06.02 18:38)
Ты все таки поступил неправилно, не в соответсвии с инструкцие, я же прямо написал, присвой их значения переменным и посмотри отладчиком, в окне Watch
Но я и так тебе могу сказарт, что их значения не
x.xx500000000000000


 
MOleg   (2002-06-24 18:52) [17]

Вот что я сделал
a:=1.245;
b:=1.345;
c:=RoundTo(a,-2);
Label1.Caption:=FloatTostr(c); <- это что-бы Delphi не ругался
c:=RoundTo(b,-2);
Label1.Caption:=FloatTostr(c);

А в окне Watch было:
a: 1.245
b: 1.345


 
MOleg   (2002-06-24 18:53) [18]

да я забыл вот что:
var
a,b,c :Double;


 
Anatoly Podgoretsky   (2002-06-24 19:28) [19]

RoundTo(x,-2) эквивалентен Round(x*100)/100
Я выполнил эту последовательность по шагам, после умножения на 100, результат был следующий
для А 124,500000000000014
для B 134,500000000000000

Дальше все понятно?
Если хочешь проверить, то в отладчике укажи что это floating Point, вместо Default

a:=1.245;
b:=1.345;
c:=a*100;
c:=Round(c);
c:=c/100;
Label1.Caption:=FloatTostr(c);



 
Юрий Зотов   (2002-06-24 23:29) [20]

"Уж сколько раз твердили миру..."

Народ, кому что неясно - ну прочтите же, наконец, статью Антона Григорьева на "Королевстве". MBo же сразу сказал.

Это же самая обычная машинная floating-point. Только МАШИННАЯ, а не наша, человеческая. Там есть свои фичи, их надо просто знать, и тогда все станет ясно.


 
MOleg   (2002-06-25 13:57) [21]

Всем спасибо!

Извините, но это упрек( > Юрий Зотов © (24.06.02 23:29)
> "Уж сколько раз твердили миру..."
> Народ, кому что неясно - ну прочтите же, наконец, статью
> Антона Григорьева на "Королевстве". MBo же сразу сказал.
),
наверно, не совсем в тему. :) (см. > MOleg © (24.06.02 18:38)).


 
Юрий Зотов   (2002-06-25 20:05) [22]

Да, это упрек.

Вы задали вопрос 24-го в 16:59.

Через 3 минуты (!!!) MBo дал совершенно точный ответ и сказал, что нужно прочесть и где оно лежит.

Но вместо того, чтобы прочесть, подумать, разобраться, а что останется неясным - спросить, Вы спустя всего 4 минуты (!!!) задали еще вопрос, а потом устроили просто форменную атаку. Чуть больше, чем за час (с 17:06 по 18:16) Вы выдали 6 постингов (!!!). Выясняя, как пользоваться дебаггером (!!!) и т.д. И лишь в 18:38 сообщили, что все-таки прочитали статью.

А ПОЧЕМУ ЖЕ НЕ СРАЗУ?

Ведь Анатолий Подгорецкий просто замучался объяснять Вам основы машинной арифметики с плавающей точкой - Вы с ним говорили на разных языках. Зато после прочтения статьи Вам потребовалось всего несколько минут, чтобы понять его (судя по той же хронологии постингов).

ТАК ПОЧЕМУ ЖЕ ВЫ СРАЗУ НЕ СДЕЛАЛИ ТО, ЧТО БЫЛО НУЖНО СДЕЛАТЬ? И ЧТО В ИТОГЕ СДЕЛАТЬ ВСЕ РАВНО ПРИШЛОСЬ. ВАМ ПЕРЕД АНАТОЛИЕМ ТЕПЕРЬ НЕ СТЫДНО ЗА ЭТО?

Так что - да, это упрек. И не только Вам лично.


 
Елена   (2002-06-26 10:04) [23]

Юрий, какой Вы строгий :o)


 
MOleg   (2002-06-26 10:57) [24]

> Юрий Зотов © (25.06.02 20:05)

Извините, что я так медленно переключаюсь с одной задачи на другую :) (только не надо высказываться насчет тормозов.)



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

Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
14-23771
vads
2002-06-07 23:50
2002.07.08
ПЕРЕПИСЫВАЮ КОМПОНЕНТУ (TDBGrid) - очень надо ???


7-23808
Torry
2002-04-12 14:30
2002.07.08
Помогите воруют мыши


1-23539
Vladimir.st
2002-06-26 16:25
2002.07.08
Помогите разобраться со StringGirid ом


1-23670
Dj Karies
2002-06-26 12:08
2002.07.08
Потоки(Threads) в DLL


4-23838
KiberArt
2002-05-09 10:24
2002.07.08
---|Ветка была без названия|---





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