powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Округление RoundTo. Непонятно :)
25 сообщений из 55, страница 2 из 3
Округление RoundTo. Непонятно :)
    #35599705
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zirraГаджимурадов Рустамzirra > Я худею, дорогая редакция!!!

С чего конкретно ?Ну, хотя бы с того, что при изменении SetRoundMode меняется результат присвоения переменных... Соответственно, и результат округления разный...
Ну на основания вывода я не стал бы делать вывод об присвоение, тут надо смотреть на представление в отладчике и с максимальной точностью.

Кроме того обычно переменные типа Double, а это вводит дополнительные погрешности при обработке.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599706
x77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Podgoretskyне понимание, как работает компилятор. Почему A := 0.2 и константа 0,2 это
разные числа

я не понимаю чисто логически. потому что если 0.175 - это, видите-ли, не 0.175, а неведомо что - то в топку такие компиляторы. до меня этот voodoo-magic не доходит.

если кто-то понимает - ну слава богу. а меня как-то больше пугают такие приколы...
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599717
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x77...
я не понимаю чисто логически. потому что если 0.175 - это, видите-ли, не 0.175, а неведомо что - то в топку такие компиляторы. до меня этот voodoo-magic не доходит...
А при чем тут компиляторы?
Ну, скажи сам, как представить в двоичной форме (Float) 0.175?
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599718
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то это не к компилятором относится, а к математике
Дискретные числа ограниченой точности.
Тебя же не смущает, что ты не можешь разделить точно 1 на 3? Какая бы точность не была. Допустим, что число не периодическая дробь, а точное число, только для точного представления нужно допустим 300 бит, а в наличии только 32/64/80

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599723
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Podgoretsky
Я не сплю, я со стороны смотрю. Я все сказал, можно было бы еще и на
Королевство послать и послал бы, но тут вопрос за пределами тех статей, тут
не понимание, как работает компилятор. Почему A := 0.2 и константа 0,2 это
разные числа, я уже сказал, но что делать если нет понимания с той стороны.

--
http://www.podgoretsky.com

Что-то Анатолий рано спать лег.
Точное представление десятичных дробей в двоичной форме - его любимая тема. "Гараж"- Занимаюсь сатирой.
- Русской или иностранной?
- Нашей.
- По девятнадцатому веку?
- Нет, современной.
- Хм! У вас потрясающая профессия! Вы занимаетесь тем, чего нет.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599741
x77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan , Anatoly Podgoretsky ,

вы хотите сказать, что дробные величины в дельфи хранятся, как частное?
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599754
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы не хотите самостоятельно разобраться? Это совсем не сложно - вспомни школьный курс про номальное представление чисел, про "мантиссу" и "порядок".
Тут то же самое, только мантисса и порядок ограничены фиксированным числом бит. Иногда хватает точности, а иногда нет.
Типа, 0.25 есть "два в минус второй степени" - значащее число всего два бита мантисса отлично помещается в двух битах ( даже в одном! - если спихуть все на порядок).

А вот 0.15 точно представить нельзя. Ну, 0.125 (два в минус третьей) + 0.015625 (два в минус шестой) + 0,0078125 (два в минус седьмой) + 0,0009765625 (два в минус десятой) + ... и т.д., давай дальше сам
Надеюсь, понятно?
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599756
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот здесь вроде понятно.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35599763
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шедевральный топик! Люблю такие темы - столько перлов можно услышать :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600053
Dryn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextManНу вот здесь вроде понятно.

а как же тогда быть с округлением, как тогда правильно округлять (получать из 0.175 0.18) ?
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600071
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовать ftCurrency
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600077
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альта в пятерке нет
а вот и да )
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600246
x77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan, читаю... что-то такое смутно вспоминается...

))))))))))))))))))))))))))))), при чём тут математика? речь о представлении данных в эвм.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600273
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx, Currency - это всего-навсего целый тип (64 бита), значение 1 принято считать за 0,0001 в десятичном исполнении.
Т.е., там нет описанных "проблем".
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #35600289
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManandreymx, Currency - это всего-навсего целый тип (64 бита), значение 1 принято считать за 0,0001 в десятичном исполнении.
Т.е., там нет описанных "проблем".
только RoundTo его (Currency) преобразует к double со всеми вытекующими ;)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Округление RoundTo. Непонятно :)
    #39542377
Помогите, пожалуйста, разобраться.
Я понял, что некоторые дроби невозможно точно представить в двоичном виде, и 0.175 это 0.17499999999999.
Но вот пример прямо из справки Делфи:
Код: pascal
1.
2.
3.
4.
5.
Expression         	Value
RoundTo(1234567, 3)	1234000
RoundTo(1.234, -2)	1.23
RoundTo(1.235, -2)	1.24
RoundTo(1.245, -2)	1.24


Пишу:
Код: pascal
1.
Form1.Label1.Caption:=FloatToStr(RoundTo(1.245,-2));


Получаю результат 1.25. А должно быть 1.24, согласно примеру из справки.
В справке ошибка?
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542386
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542397
zinpub,
спасибо. Но я это сразу попробовал.
В справке сказано: "With the default rounding mode (rmNearest), if X is exactly halfway between two whole numbers, the result is always the even number.".
Ок. Делаем:
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.Button1Click(Sender: TObject);
begin
   SetRoundMode(rmNearest);
   Form1.Label2.Caption:=FloatToStr(RoundTo(1.245,-2));
end;


Результат: 1.25
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542408
Я уже все таблицами исписал. Это правило прекрасно работает, если округляем до целых:
1.5 = 2
2.5 = 2
3.5 = 4
4.5 = 4
И т.д.
С округлением до десятых, сотых и т.д. - случайный результат. Где-то округляется в большую сторону, где-то в меньшую.
Причем у функции RoundTo(V,-2) и у функции FloatToStr(V,3,4) - порой разный результат округления.

Пример:
RoundTo(1.55,-1) = 1.5
FloatToStr(1.55,2,4) = '1.6E+0000'
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542423
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Федор_Федор,

Можно ещё посмотреть в сторону Set8087CW, но там с 32/64 разница есть
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542429
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор_Федор,

для школьного округления надо использовать SimpleRoundTo
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542509
zinpub,

Ок. Спасибо. С ней пока не разбирался.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542520
JaDi,

Спасибо. Я обычно мудрил что-то вроде Round(V*n)/n, где n - номер цифры после запятой, которую надо округлить. Все работает отлично. Но недавно обнаружил, что есть RoundTo. Она вроде удобнее (писанины меньше), но работает непредсказуемо.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542548
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор_Федор,

Она работает предсказуемо -- это называется банковское округление (округление к ближайшему четному числу). Используется для того, чтобы у бахгалтеров ошибка округления не накапливалась при большом количестве записей.
...
Рейтинг: 0 / 0
Округление RoundTo. Непонятно :)
    #39542709
JaDi,
Тут вся ветка о банковском округлении, но все равно спасибо, что напомнили :-)
Непредсказуемо - это значит не в соответствии ни с правилами "банковского" округления, ни в соответствии с правилами "школьного" округления. Примеры - выше в теме.
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Округление RoundTo. Непонятно :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]