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