|
|
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
zirraГаджимурадов Рустамzirra > Я худею, дорогая редакция!!! С чего конкретно ?Ну, хотя бы с того, что при изменении SetRoundMode меняется результат присвоения переменных... Соответственно, и результат округления разный... Ну на основания вывода я не стал бы делать вывод об присвоение, тут надо смотреть на представление в отладчике и с максимальной точностью. Кроме того обычно переменные типа Double, а это вводит дополнительные погрешности при обработке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 01:13:02 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Anatoly Podgoretskyне понимание, как работает компилятор. Почему A := 0.2 и константа 0,2 это разные числа я не понимаю чисто логически. потому что если 0.175 - это, видите-ли, не 0.175, а неведомо что - то в топку такие компиляторы. до меня этот voodoo-magic не доходит. если кто-то понимает - ну слава богу. а меня как-то больше пугают такие приколы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 01:13:17 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
x77... я не понимаю чисто логически. потому что если 0.175 - это, видите-ли, не 0.175, а неведомо что - то в топку такие компиляторы. до меня этот voodoo-magic не доходит... А при чем тут компиляторы? Ну, скажи сам, как представить в двоичной форме (Float) 0.175? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 01:22:50 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Вообще то это не к компилятором относится, а к математике Дискретные числа ограниченой точности. Тебя же не смущает, что ты не можешь разделить точно 1 на 3? Какая бы точность не была. Допустим, что число не периодическая дробь, а точное число, только для точного представления нужно допустим 300 бит, а в наличии только 32/64/80 -- http://www.podgoretsky.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 01:24:15 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Anatoly Podgoretsky Я не сплю, я со стороны смотрю. Я все сказал, можно было бы еще и на Королевство послать и послал бы, но тут вопрос за пределами тех статей, тут не понимание, как работает компилятор. Почему A := 0.2 и константа 0,2 это разные числа, я уже сказал, но что делать если нет понимания с той стороны. -- http://www.podgoretsky.com Что-то Анатолий рано спать лег. Точное представление десятичных дробей в двоичной форме - его любимая тема. "Гараж"- Занимаюсь сатирой. - Русской или иностранной? - Нашей. - По девятнадцатому веку? - Нет, современной. - Хм! У вас потрясающая профессия! Вы занимаетесь тем, чего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 01:36:31 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
NextMan , Anatoly Podgoretsky , вы хотите сказать, что дробные величины в дельфи хранятся, как частное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 02:11:15 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
А вы не хотите самостоятельно разобраться? Это совсем не сложно - вспомни школьный курс про номальное представление чисел, про "мантиссу" и "порядок". Тут то же самое, только мантисса и порядок ограничены фиксированным числом бит. Иногда хватает точности, а иногда нет. Типа, 0.25 есть "два в минус второй степени" - значащее число всего два бита мантисса отлично помещается в двух битах ( даже в одном! - если спихуть все на порядок). А вот 0.15 точно представить нельзя. Ну, 0.125 (два в минус третьей) + 0.015625 (два в минус шестой) + 0,0078125 (два в минус седьмой) + 0,0009765625 (два в минус десятой) + ... и т.д., давай дальше сам Надеюсь, понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 02:35:55 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Ну вот здесь вроде понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 02:38:13 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Шедевральный топик! Люблю такие темы - столько перлов можно услышать :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 03:21:43 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
NextManНу вот здесь вроде понятно. а как же тогда быть с округлением, как тогда правильно округлять (получать из 0.175 0.18) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 10:06:47 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
попробовать ftCurrency ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 10:14:38 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Альта в пятерке нет а вот и да ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 10:16:35 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
NextMan, читаю... что-то такое смутно вспоминается... ))))))))))))))))))))))))))))), при чём тут математика? речь о представлении данных в эвм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 11:07:43 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
andreymx, Currency - это всего-навсего целый тип (64 бита), значение 1 принято считать за 0,0001 в десятичном исполнении. Т.е., там нет описанных "проблем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 11:14:24 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
NextManandreymx, Currency - это всего-навсего целый тип (64 бита), значение 1 принято считать за 0,0001 в десятичном исполнении. Т.е., там нет описанных "проблем". только RoundTo его (Currency) преобразует к double со всеми вытекующими ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 11:17:09 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, разобраться. Я понял, что некоторые дроби невозможно точно представить в двоичном виде, и 0.175 это 0.17499999999999. Но вот пример прямо из справки Делфи: Код: pascal 1. 2. 3. 4. 5. Пишу: Код: pascal 1. Получаю результат 1.25. А должно быть 1.24, согласно примеру из справки. В справке ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:02:59 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:12:02 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
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. Результат: 1.25 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:20:22 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Я уже все таблицами исписал. Это правило прекрасно работает, если округляем до целых: 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' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:26:56 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Федор_Федор, Можно ещё посмотреть в сторону Set8087CW, но там с 32/64 разница есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:40:09 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Федор_Федор, для школьного округления надо использовать SimpleRoundTo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:43:37 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
zinpub, Ок. Спасибо. С ней пока не разбирался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 14:36:29 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
JaDi, Спасибо. Я обычно мудрил что-то вроде Round(V*n)/n, где n - номер цифры после запятой, которую надо округлить. Все работает отлично. Но недавно обнаружил, что есть RoundTo. Она вроде удобнее (писанины меньше), но работает непредсказуемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 14:41:32 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
Федор_Федор, Она работает предсказуемо -- это называется банковское округление (округление к ближайшему четному числу). Используется для того, чтобы у бахгалтеров ошибка округления не накапливалась при большом количестве записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 15:04:57 |
|
||
|
Округление RoundTo. Непонятно :)
|
|||
|---|---|---|---|
|
#18+
JaDi, Тут вся ветка о банковском округлении, но все равно спасибо, что напомнили :-) Непредсказуемо - это значит не в соответствии ни с правилами "банковского" округления, ни в соответствии с правилами "школьного" округления. Примеры - выше в теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 17:14:36 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39542397&tid=2041678]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
189ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 480ms |

| 0 / 0 |
