![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RoundTo(1.245,-2)=1.25 а RoundTo(1.345,-2)=1.34 в чем подвох? [D6, Win2k]
MOleg © (2002-06-24 16:59:00)Люди добрые помогите! В чем причина?
MOleg (2002-06-26 10:57:00) [1]> Юрий Зотов © (25.06.02 20:05)
Извините, что я так медленно переключаюсь с одной задачи на другую :) (только не надо высказываться насчет тормозов.)
Елена (2002-06-26 10:04:00) [2]Юрий, какой Вы строгий :o)
Юрий Зотов (2002-06-25 20:05:00) [3]Да, это упрек.
Вы задали вопрос 24-го в 16:59.
Через 3 минуты (!!!) MBo дал совершенно точный ответ и сказал, что нужно прочесть и где оно лежит.
Но вместо того, чтобы прочесть, подумать, разобраться, а что останется неясным - спросить, Вы спустя всего 4 минуты (!!!) задали еще вопрос, а потом устроили просто форменную атаку. Чуть больше, чем за час (с 17:06 по 18:16) Вы выдали 6 постингов (!!!). Выясняя, как пользоваться дебаггером (!!!) и т.д. И лишь в 18:38 сообщили, что все-таки прочитали статью.
А ПОЧЕМУ ЖЕ НЕ СРАЗУ?
Ведь Анатолий Подгорецкий просто замучался объяснять Вам основы машинной арифметики с плавающей точкой - Вы с ним говорили на разных языках. Зато после прочтения статьи Вам потребовалось всего несколько минут, чтобы понять его (судя по той же хронологии постингов).
ТАК ПОЧЕМУ ЖЕ ВЫ СРАЗУ НЕ СДЕЛАЛИ ТО, ЧТО БЫЛО НУЖНО СДЕЛАТЬ? И ЧТО В ИТОГЕ СДЕЛАТЬ ВСЕ РАВНО ПРИШЛОСЬ. ВАМ ПЕРЕД АНАТОЛИЕМ ТЕПЕРЬ НЕ СТЫДНО ЗА ЭТО?
Так что - да, это упрек. И не только Вам лично.
MOleg (2002-06-25 13:57:00) [4]Всем спасибо!
Извините, но это упрек( > Юрий Зотов © (24.06.02 23:29)
> "Уж сколько раз твердили миру..."
> Народ, кому что неясно - ну прочтите же, наконец, статью
> Антона Григорьева на "Королевстве". MBo же сразу сказал.),
наверно, не совсем в тему. :) (см. > MOleg © (24.06.02 18:38)).
Юрий Зотов (2002-06-24 23:29:00) [5]"Уж сколько раз твердили миру..."
Народ, кому что неясно - ну прочтите же, наконец, статью Антона Григорьева на "Королевстве". MBo же сразу сказал.
Это же самая обычная машинная floating-point. Только МАШИННАЯ, а не наша, человеческая. Там есть свои фичи, их надо просто знать, и тогда все станет ясно.
Anatoly Podgoretsky (2002-06-24 19:28:00) [6]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);
MOleg (2002-06-24 18:53:00) [7]да я забыл вот что:
var
a,b,c :Double;
MOleg (2002-06-24 18:52:00) [8]Вот что я сделал
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
Anatoly Podgoretsky (2002-06-24 18:46:00) [9]MOleg © (24.06.02 18:38)
Ты все таки поступил неправилно, не в соответсвии с инструкцие, я же прямо написал, присвой их значения переменным и посмотри отладчиком, в окне Watch
Но я и так тебе могу сказарт, что их значения не
x.xx500000000000000
MOleg (2002-06-24 18:38:00) [10]
> MBo © (24.06.02 17:02)
> в ограниченной точности представления вещественных чисел
> на www.delphikingdom.com есть статья
Спасибо за ссылку, прочитал ( http://delphi.vitpc.com/helloworld/reals.htm).
Все встало на свое место.
Отдельное спасибо Anatoly Podgoretsky
MOleg (2002-06-24 18:16:00) [11]Это что-то типа:
Mov[ebp-$08],$1eb851ec
Mov[ebp-$04],$3ff3eb85
Да?
Anatoly Podgoretsky (2002-06-24 18:06:00) [12]Какой команды, речь шла о том, что бы ты посмотрел истинное значение переменных в отладчике, а не код
MOleg (2002-06-24 17:57:00) [13]Когда я дошел до команды fmul, то понял, что мне нечего там шукать. Буду писать ручками. :(
Anatoly Podgoretsky (2002-06-24 17:51:00) [14]Ты выполнил проверку с помощью отладчика?
MOleg (2002-06-24 17:47:00) [15]
> Anatoly Podgoretsky © (24.06.02 17:42)
> Так вариантов округления много, в четную, нечетную, к большему,
> к меньшему
Нет, это понятно.
Я в смысле: почему от перемены числа меняется результат, метод-то не меняется.
Anatoly Podgoretsky (2002-06-24 17:42:00) [16]Так вариантов округления много, в четную, нечетную, к большему, к меньшему
MOleg (2002-06-24 17:39:00) [17]
> Это просто банковское округление, а не математическое.
Ребята а вы о чем?
Anatoly Podgoretsky (2002-06-24 17:37:00) [18]MOleg © (24.06.02 17:23)
Присвой эти константы переменным и посмотри именно отладчиком, именно им а не функцией вывода на экран, тогда сразу поймешь и заюудешь про округление чисе с плавающей запятой, они не фиксированной точкой
kull (2002-06-24 17:30:00) [19]Это просто банковское округление, а не математическое.
Wizard_Ex (2002-06-24 17:27:00) [20]Вообче есть еще математическое округление
если перед пятеркой четное - то округляется до него
если нет то как обычно
вроде так
вышка однако