Математики пост
Feb. 15th, 2011 06:53 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Привет!
Вопрос про округление
Есть число — 33,734912
Надо округлить до сотых.
Как правильно, и почему?
Я всегда округлял по очереди, так что получалось 33,74, да и учили меня так.
но тут мне сказали что это всё неправильно, и при округлении до сотых смотрят только на тысячные, так что получается как 33,73
Аргументы, пожалуйста.
Спасибо!
Вопрос про округление
Есть число — 33,734912
Надо округлить до сотых.
Как правильно, и почему?
Я всегда округлял по очереди, так что получалось 33,74, да и учили меня так.
но тут мне сказали что это всё неправильно, и при округлении до сотых смотрят только на тысячные, так что получается как 33,73
Аргументы, пожалуйста.
Спасибо!
no subject
Date: 2011-02-15 03:54 pm (UTC)То, что вы делали, называется накопление ошибки.
no subject
Date: 2011-02-15 04:09 pm (UTC)no subject
Date: 2011-02-15 04:47 pm (UTC)no subject
Date: 2011-02-15 06:06 pm (UTC)no subject
Date: 2011-02-15 06:20 pm (UTC)no subject
Date: 2011-02-15 03:58 pm (UTC)no subject
Date: 2011-02-15 04:09 pm (UTC)no subject
Date: 2011-02-15 04:11 pm (UTC)no subject
Date: 2011-02-15 04:38 pm (UTC)Почему в бухгалтерии возникают числа с более чем двумя знаками после запятой? Например, виноват НДС. Или стандартный коэффициент наценки. Допустим, себестоимость мы определили в 197 рублей 35 копеек. Накручиваем сверху наценку 1,3 и НДС 1,18 вот и выходит.
Или в счетах-фактурах есть графы Стоимость без НДС, НДС и стоимость с НДС. Если умножить общую стоимость без НДС на 1,18 то мы можем из-за ошибок такого обычного округления не получить сумму по графе Стоимость с НДС — я с таким сталкивался не раз :) Хотя уже давно не связан со счетами-фактурами и т.п., но вот вспомнилось.
no subject
Date: 2011-02-15 04:39 pm (UTC)no subject
Date: 2011-02-15 04:46 pm (UTC)no subject
Date: 2011-02-15 06:49 pm (UTC)no subject
Date: 2011-02-15 07:15 pm (UTC)1) округление происходит не по цифрам, а по интервалам. Т.е. парой считается не 1 и 9, а (0,1] и [9,10).
2) из 1) следует что "непарной" остается не следующий разрядный знак 5, а следующие разрядные знаки 5(0).
3) соответственно, для "бухгалтерского округления" смотрится четность/нечетность не следующего после "5" разрядного знака (там всегда 0), а предыдущего.
Ко всему прочему есть ГОСТовские правила округления для измеряемых величин (видно, что оно "арифметическое" с дополнительными пунктами насчет округления округленного).
ПРИЛОЖЕНИЕ А
(справочное)
Правила округления
А.1. Округление представляет собой отбрасывание значащих цифр справа до определенного разряда с возможным изменением цифры этого разряда.
Пример: Округление числа 132,48 до четырех значащих цифр будет 132,5.
А.2. В случае, если первая из отбрасываемых цифр (считая слева направо) меньше 5, последняя сохраняемая цифра не меняется.
Пример: Округление числа 12,23 до трех значащих цифр дает 12,2.
А.3. В случае, если первая из отбрасываемых цифр (считая слева направо) равна 5, последняя сохраняемая цифра увеличивается на единицу.
Пример: Округление числа 0,145 до двух значащих цифр дает 0,15.
Примечание - В случаях, когда следует учитывать результаты предыдущих округлений, поступают следующим образом:
- если отбрасываемая цифра получилась в результате предыдущего округления в большую сторону, то последняя сохраняемая цифра сохраняется.
Пример: Округление до одной значащей цифры числа 0,15 (полученного после округления числа 0,149) дает 0,1;
- если отбрасываемая цифра получилась в результате предыдущего округления в меньшую сторону, то последняя оставшаяся цифра увеличивается на единицу (с переходом при необходимости в следующие разряды).
Пример: Округление числа 0,25 (полученного в результате предыдущего округления числа 0,25) дает 0,3.
А.4. В случае, если первая из отбрасываемых цифр (считая слева направо) больше 5, то последняя сохраняемая цифра увеличивается на единицу.
Пример: Округление числа 0,156 до двух значащих цифр дает 0,16.
А.5. Округление следует выполнять сразу до желаемого количества значащих цифр, а не по этапам.
Пример: Округление числа 565,46 до трех значащих цифр производится непосредственно на 565.
Округление по этапам привело бы:
на I этапе к 565, 5;
на II этапе к 566 (ошибочно).
А.6. Целые числа округляют по тем же правилам, как и дробные.
Пример: Округление числа 12456 до двух значащих цифр дает 12 × 10^3.
no subject
Date: 2011-02-15 07:43 pm (UTC)1) Например, «округление происходит не по цифрам, а по интервалам» противоречит приведённому Вами же правилу округления из ГОСТ «Округление представляет собой отбрасывание значащих цифр справа до определенного разряда с возможным изменением цифры этого разряда.»
Кроме того, даже если в каком-то «методическом» смысле правильнее говорить об интервалах, то:
а) в популярном изложении это лишнее и
б) на практике (если вы собираетесь писать функцию для бухгалтерского округления, то ориентироваться Вы будете именно на цифры)
2) не совсем понятно при чём здесь ГОСТ для измеряемых величин. Бухгалтерская отчётность к ним не относится.
3) По поводу следующей после пятёрки цифры — моя ошибка.
4) Если Вам интересно, кроме ГОСТ существуют и другие документы. IEEE 754 приводит семь типов округления:
round-down - усечение по направлению к нулю
round-half-up - арифметическое округление
round-half-even - банковское округление
round-ceiling - округление к плюс-бесконечности
round-floor - округление к минус-бесконечности
round-half-down (опционально) - подобно арифметическому, пятерка округляется вниз
round-up - (опционально) округление от нуля
Приведённое Вами ГОСТовское — это второй из типов.
no subject
Date: 2011-02-16 04:23 am (UTC)Общий принцип округления построен на анализе отбрасываемой части, т.е. интервале. В арифметическом округлении для этого анализа достаточно рассмотреть старший из отбрасываемых разрядов, в чем и заключается его простота.
Для "бухгалтерского" округления этого недостаточно. Требуется рассмотрение ВСЕХ отбрасываемых разрядов и правило вверх-вниз применяется только в случае 5(0). В остальных случаях 5-ки округление происходит вверх. Т.е. здесь мы явным образом сталкиваемся с интервалами.
С интервалами мы сталкиваемся и в приведенном ГОСТе при рассмотрении правил округления уже округленных величин.
P.S. Или вы на полном серьезе считаете, что по "бух" правилам 0.5999999 будет округляться до 0?
no subject
Date: 2011-02-15 09:14 pm (UTC)no subject
Date: 2011-02-15 09:15 pm (UTC)no subject
Date: 2011-02-15 09:17 pm (UTC)no subject
Date: 2011-02-15 09:18 pm (UTC)no subject
Date: 2011-02-15 09:26 pm (UTC)А если 3-я цифра 0 - тоже ведь уменьшаем. :)) Почему про это забыли?
no subject
Date: 2011-02-15 04:16 pm (UTC)но к данному случаю имхо неприменимо.
no subject
Date: 2011-02-15 04:26 pm (UTC)no subject
Date: 2011-02-15 04:28 pm (UTC)no subject
Date: 2011-02-15 04:00 pm (UTC)ведь округляется в большую сторону, если доля больше 1/2
в меньшую - меньше 1/2
в нашем случае
0,004912 - меньше половины предыдущего разряда, значит округлять его надо в меньшую сторону.
no subject
Date: 2011-02-15 04:01 pm (UTC)у нас сейчас так округляют деньги с переходом на евро, так что это точно.:)
no subject
Date: 2011-02-15 04:08 pm (UTC)По правилам 33.73
no subject
Date: 2011-02-15 04:14 pm (UTC)no subject
Date: 2011-02-15 04:26 pm (UTC)no subject
Date: 2011-02-15 04:48 pm (UTC)no subject
Date: 2011-02-15 05:42 pm (UTC)no subject
Date: 2011-02-15 05:49 pm (UTC)no subject
Date: 2011-02-15 05:53 pm (UTC)Если округляем до единиц, прибавляем 0,5; до десятков - 5; до сотен - 50 и т.д. В вашем случае прибавляем 0,005.
no subject
Date: 2011-02-15 05:55 pm (UTC)no subject
Date: 2011-02-15 06:13 pm (UTC)no subject
Date: 2011-02-15 06:14 pm (UTC)no subject
Date: 2011-02-15 06:25 pm (UTC)no subject
Date: 2011-02-15 04:30 pm (UTC)no subject
Date: 2011-02-15 04:34 pm (UTC)no subject
Date: 2011-02-15 05:30 pm (UTC)no subject
Date: 2011-02-15 06:45 pm (UTC)33,734912-33,73=0,004912
Во втором случае ошибка меньше.
no subject
Date: 2011-02-15 06:47 pm (UTC)