Автор Тема: Вопрос с округлениями  (Прочитано 3545 раз)

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Вопрос с округлениями
« : 01 Июнь 2022, 23:32:02 »
Итак. В январе 2020 это уже поднималось. Но сегодня снова возник скользкий прецедент.
Хочу спросить у автора форума, почему принята такая бескомпромиссная позиция округления пятерок в сотых - до наибольшего по абсолютному значению десятого?

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #1 : 01 Июнь 2022, 23:40:18 »
Так это ж обычная арифметика:
0, 1, 2, 3, 4 - меньше
5, 6, 7, 8, 9 - больше.

Оффлайн Kostian

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 13818
  • Планета Земля
    • Просмотр профиля
    • Погода и климат
Re: Вопрос с округлениями
« Ответ #2 : 01 Июнь 2022, 23:56:40 »
Alter

А как должно быть?  ???

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #3 : 02 Июнь 2022, 00:00:04 »
Другое дело - двойное округление:
0.0495
0.05
0.1
Если мы сразу округлим до десятых, то получится 0, а если сначала до сотых, а потом до десятых, то получится 0.1 ;D

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #4 : 02 Июнь 2022, 00:08:55 »
Так это ж обычная арифметика:
0, 1, 2, 3, 4 - меньше
5, 6, 7, 8, 9 - больше.
Меньше чего? Это правило действенно только тогда, когда за указанным порядком есть любой другой.
18,845 округляется до 18,8.
18,854 до 18,9.

А когда цифра одна, то начнем с того, что в таком варианте 0 - это вообще не цифра, ее нет в этом случае, понимаете?
нет никакого +18,80 ровно, это и есть +18,8 - или я могу написать вместо него какое-нибудь +18,8000000 - это не будет иметь никакого смысла.
Остается лишь 9 цифр: 1,2,3,4,5,6,7,8,9
1,2,3,4 - меньше.
6,7,8,9 - больше.
5 - ни туда и ни сюда.

Kostian, однобокое округление приводит к накоплению лишних градусов. Быть может, эффект и минимален, но он есть.
Округлять 5 можно:
1. До меньшего
2. До большего
3. До ближайшего четного.
Вот и еще раз вопрос, почему именно до большего?

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #5 : 02 Июнь 2022, 00:11:45 »
Другое дело - двойное округление:
0.0495
0.05
0.1
Если мы сразу округлим до десятых, то получится 0, а если сначала до сотых, а потом до десятых, то получится 0.1 ;D
Ну вот хороший пример. На 3-й итерации уже ошибка.
Известно, что исходное число ближе к 0, чем к 0,1.
А по Вашей кривой якобы "методике" оно превращается в 0,1. Полный бред.
При первом округлении по корректной методике мы как раз смотрим на "4 - меньше". И сразу превращаем его в 0,0.
« Последнее редактирование: 02 Июнь 2022, 00:13:56 от Alter »

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #6 : 02 Июнь 2022, 00:20:30 »
Цитировать
Округление наполовину до четного
Правило тай-брейка без положительного / отрицательного смещения и без смещения в сторону / от нуля округляет половину до четного. По этому соглашению, если дробная часть xравна 0,5, то yявляется четным целым числом, ближайшим к x. Так, например, +23.5 становится +24, как и +24.5; однако -23.5 становится -24, как и -24.5. Эта функция минимизирует ожидаемую ошибку при суммировании по округленным цифрам, даже если входные данные в основном положительные или в основном отрицательные, при условии, что они не являются ни в основном четными, ни в основном нечетными.
В школе преподают вещи, которые нужны в обиходе. В точных науках надо стремиться использовать не бытовые "фишки", а то, что минимизирует ошибки. Так что неважно, что именно преподавали в школе. Тем более, что все считается ЭВМ, алгоритм округления настроить - пара пустяков.
Случайные цифры в десятых климатического ряда не являются ни в основном четными, ни нечетными. Частота таких цифр в данных стремится к 50%. Вполне удобный и справедливый критерий округления.
И отвечая на вопрос "как должно быть". Должно быть максимально точно. А не так, как "учили в 3 классе".
« Последнее редактирование: 02 Июнь 2022, 00:23:06 от Alter »

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #7 : 02 Июнь 2022, 00:23:26 »
Ну вот хороший пример. На 3-й итерации уже ошибка.
Этот пример ничего общего с реальностью не имеет. Округляют сразу до нужной дробной части.

что в таком варианте 0 - это вообще не цифра
Здесь речь не о цифрах, а о числах. Если представить число, в виде записи с сотыми, то, как я уже привёл пример в другой теме должен быть баланс: чисел от 5.00 до 5.99 должно быть одинаковое кол-во. От 5.00 до 5.49 и от 5.50 до 5.99 по 50

Во всех научных исследованиях, программах и прочих экселях - естественно так всё это и работает.

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #8 : 02 Июнь 2022, 00:32:10 »

Здесь речь не о цифрах, а о числах. Если представить число, в виде записи с сотыми, то, как я уже привёл пример в другой теме должен быть баланс: чисел от 5.00 до 5.99 должно быть одинаковое кол-во. От 5.00 до 5.49 и от 5.50 до 5.99 по 50

Во всех научных исследованиях, программах и прочих экселях - естественно так всё это и работает.
Абсолютно непрактично. Красиво, но глупо. Изучите вопрос что ли. Википедию почитайте для начала. "Все так работает" - это вообще дилетантское заявление. Сейчас большой выбор режимов округления.
Цитировать
Отдельного описания требуют правила округления для специального случая, когда (N+1)-й знак = 5, а последующие знаки равны нулю. Если во всех остальных случаях округление до ближайшего целого обеспечивает меньшую погрешность округления, то данный частный случай характерен тем, что для однократного округления формально безразлично, производить его «вверх» или «вниз» — в обоих случаях вносится погрешность ровно в 1/2 младшего разряда. Существуют следующие варианты правила округления до ближайшего целого для данного случая:

Математическое округление[источник не указан 540 дней] — округление всегда в бо́льшую по модулю сторону (предыдущий разряд всегда увеличивается на единицу).
Округление до ближайшего чётного (в английском языке известно под названием англ. banker's rounding — «округление банкира») — округление для этого случая происходит к ближайшему чётному числу, то есть 2,5 → 2; 3,5 → 4.
Случайное округление — округление происходит в меньшую или большую сторону в случайном порядке, но с равной вероятностью (может использоваться в статистике).
Чередующееся округление — округление происходит в меньшую или большую сторону поочерёдно.
Во всех вариантах в случае, когда (N+1)-й знак не равен 5 или последующие знаки не равны нулю, округление происходит по обычным правилам: 2,49 → 2; 2,51 → 3.

Математическое округление просто формально соответствует общему правилу округления (см. выше). Его недостатком является то, что при округлении большого числа значений, которые далее будут обрабатываться совместно, может происходить накопление ошибки округления. Типичный пример: округление до целых рублей денежных сумм, выражаемых в рублях и копейках. В реестре из 10 000 строк (если считать копеечную часть каждой суммы случайным числом с равномерным распределением, что обычно вполне допустимо) окажется в среднем около 100 строк с суммами, содержащими в части копеек значение 50. При округлении всех таких строк по правилам математического округления «вверх» сумма «итого» по округлённому реестру окажется на 50 рублей больше точной.

Три остальных варианта как раз и придуманы для того, чтобы уменьшить общую погрешность суммы при округлении большого количества значений. Округление «до ближайшего чётного» исходит из предположения, что при большом числе округляемых значений, имеющих 0,5 в округляемом остатке, в среднем половина из них окажется слева, а половина — справа от ближайшего чётного, таким образом, ошибки округления взаимно погасятся. Строго говоря, предположение это верно лишь тогда, когда набор округляемых чисел обладает свойствами случайного ряда, что обычно верно в бухгалтерских приложениях, где речь идёт о ценах, суммах на счетах и так далее. Если же предположение будет нарушено, то и округление «до чётного» может приводить к систематическим ошибкам. Для таких случаев лучше работают два следующих метода.

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

Округление в случайную сторону требует для каждой округляемой строки генерировать случайное число. При использовании псевдослучайных чисел, создаваемых линейным рекуррентным методом, для генерации каждого числа требуется операция умножения, сложения и деления по модулю, что для больших объёмов данных может существенно замедлить расчёты.
Чередующееся округление требует хранить флаг, показывающий, в какую сторону последний раз округлялось специальное значение, и при каждой операции переключать значение этого флага.
Ну если у Вас есть научное исследование, доказывающее, что метод округление "пятерок" до большего целого является более корректным в отношении вероятных ошибок, нежели вышеперечисленные, то прошу его сюда.
Пока одни голословные утверждения.
Википедия в данном случае лучше множества других источников - научные статьи там проходят достаточно жесткую и справедливую проверку. Чего конечно не скажешь о проверках в статьях гуманитарного толка, от чего у некоторых к википедии образовалось весьма негативное отношение. Но она конечно не претендует на строгую научность, поэтому готов при изучении реально научной математической статьи на тему округления принять Вашу точку зрения. Сейчас она абсолютно неубедительно. Ошибка накапливается, а нам зачем-то нужно равенство чисел. Ну и околесица.
« Последнее редактирование: 02 Июнь 2022, 00:35:27 от Alter »

Оффлайн Kostian

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 13818
  • Планета Земля
    • Просмотр профиля
    • Погода и климат
Re: Вопрос с округлениями
« Ответ #9 : 02 Июнь 2022, 00:38:34 »
Округлять 5 можно:
1. До меньшего
2. До большего
3. До ближайшего четного.
Вот и еще раз вопрос, почему именно до большего?

Потому что по умолчанию функция производит математическое округление. Чтобы округлять, к примеру, до ближайшего четного, нужно использовать дополнительные параметры, такие как PHP_ROUND_HALF_EVEN.

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #10 : 02 Июнь 2022, 00:56:50 »
Kostian, спасибо. Значит, не думали над этим вопросом. Ну вот, подкинул пищу для размышлений.
Систематические ошибки самих измерений, наверно, дадут и дают большую сумму накопленных отклонений, но это не отменяет того факта, что желательно бы бороться со всеми вероятными систематическими ошибками. Никогда не знаешь, что, где и когда вылезет. Пусть даже вероятность равна каких-нибудь 0,5%. Мы имеем дело с погодой и климатом и знаем, что может быть почти все, что угодно ;D

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #11 : 02 Июнь 2022, 01:02:11 »
дадут и дают большую сумму накопленных отклонений
Та погрешность, которая существует в метеорологических базах ничто с копейками из реестра в 10 000 строк  :)
Взять хотя бы неточность вычисления средней по суткам, а не по срокам, там ваша неточность с округлением пятёрки точно будет в пределах погрешности, которую можно опустить...

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #12 : 02 Июнь 2022, 01:27:26 »
За 10000 месяцев получается накопится 0.005 ошибка средней (если сумма 50 за 10000 строк, в примере с баблом)?
За 2000 месяцев (167 лет наблюдений, к примеру) 0.001 градуса (одна тысячная градуса) :)

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #13 : 02 Июнь 2022, 07:37:36 »
Alter, да и к тому же, я тут подумал с утреца, а что там с сотыми? Можете мне привести хоть один месяц с ровными сотыми в конце? Например, 18.85. Есть такие вообще? :D
А округлять, к примеру, 18.851 или 18.85001454 можно только строго до 18.9, если округляем до десятых (а мы и округляем всё до десятых), все другие практики в данном случае абсурдны, бессмысленны и ложны.
Они применимы только к числам, оканчивающимся строго на 5. А в случайном распределение, где есть 18.85001 будет когда-то и 18.84999...
« Последнее редактирование: 02 Июнь 2022, 07:39:50 от Vasilii »

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #14 : 02 Июнь 2022, 08:03:06 »
Например, 18.85. Есть такие вообще? :D
Хотя должны быть. Вероятность 1 к 30, да и то в месяцах, где кол-во дней чётное, т.е. 1 раз в 5 лет.
Получается ещё 0.001 надо на 30 разделить :o
Эта погрешность просто абсолютное ничто с погрешностями измерений, к примеру, или со сложением суток, а не сроков...

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #15 : 02 Июнь 2022, 11:53:23 »
За 10000 месяцев получается накопится 0.005 ошибка средней (если сумма 50 за 10000 строк, в примере с баблом)?
За 2000 месяцев (167 лет наблюдений, к примеру) 0.001 градуса (одна тысячная градуса) :)
10000 строк, во-первых, не равно сумме в 10000 ;D
Это первое. Но не главное.
Хоть там и получается на первый взгляд мизерная доля, надо учитывать, что когда имеешь дело со значениями разного знака, тут достаточно всего нескольких примеров, чтобы навести серьезную "кривизну". Рассмотрим год в каком-нибудь сибирском городке.
Предположим средняя одного такого года была +0,05.
А еще одного -0,05.
По методу "до большего" У нас есть год со средней 0,0 и год со средней +0,1. И нет никакого года  с отрицательной средней.
На самом деле такой год есть. По методу округления до четных получаем 2 года со средней +0,0. Да, тоже не совсем верно,  но общая картина не портится в одну сторону.
Да и в принципе можно поговорить о суммах таких лет.
Вероятность такого года - 1/12. Нет сомнения, что в климатических рядах может накопиться с десяток таких лет. И это лишь при среднем математическом ожидании. В реальности с отличной от 0 вероятностью могут быть ситуации, когда таких лет будет несколько десятков. 

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #16 : 02 Июнь 2022, 12:05:39 »
Alter
насколько я помню из школьной программы математики, пятёрки принято округлять именно вверх.
Это не просто принято, а логично, для баланса. Если бы пятёрки округляли в меньшую сторону, то чисел от 0 до 0.50 - было бы 51, а от 0.51 до 0.99: 49
Это так логично, что у Вас сумма отклонений не сходится ;D
Итак, при округлении возникают отклонения. Допустим, как Вы говорите. Будем идти с 2 сторон.
С 0.00 до 0.49 и с 0.99 до 0.50.
Начинаем. Округляем 0,00 до 0,00. Отклонение 0. Сумма 0. Округляем 0,99 до 1,00. Отклонение +0,1. Сумма отклонений +0,01.
0,01 до 0,00 и 0,98 до 1,00. Сумма отклонений опять -0,1 + 0,02 = +0,01.
И так по каждому шагу итерации. На каждом будет накапливаться 0,01 отклонения в плюс.
На 50-м шагу нам встретится округление 0,50 до 1,0 с отклонением +0,5 и 0,49 до 0,0 с отклонением -0,49. Те же +0,01.
Вот и имеем, что при каждом возможном таком округлении накапливается отклонение в одну сторону с финальной суммой отклонений в 0,5. В сбалансированном же методе округления эта сумма должна быть если не 0, то хотя бы стремиться к 0 на бесконечности, а не к 0,5.
Метод совершенно очевидно кривой и точно несбалансированный. На практике могут быть совершенно разные ситуации от той, когда действительно плевать на то, какой метод использовать до такого, где он вполне может повлиять на итоговые цифры. Но в любом случае нельзя утверждать, что этот метод "верный", "сбалансированный", "справедливый" и проч.
« Последнее редактирование: 02 Июнь 2022, 12:10:31 от Alter »

Онлайн Ilgiz

  • Ветеран
  • *****
  • Сообщений: 7893
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #17 : 02 Июнь 2022, 12:42:09 »
Alter
так если я не ошибаюсь, при отрицательных значениях округление по такой методике идёт зеркально относительно нуля, "вверх по модулю", то есть вниз по факту. Или я не прав?
Поддерживаю потепление климата в Москве, МО и соседних регионах. За преобладание комфортной погоды в году с минимизацией носимой одежды как можно более длительное время. Приоритетные периоды для тепла - апрель-июнь и август-октябрь.

Оффлайн Vasilii

  • Ветеран
  • *****
  • Сообщений: 2317
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #18 : 02 Июнь 2022, 13:48:11 »
Это так логично, что у Вас сумма отклонений не сходится ;D
Итак, при округлении возникают отклонения. Допустим, как Вы говорите. Будем идти с 2 сторон.
.....
Я писал про зрительный баланс, почему принято округлять в большую сторону, а не в меньшую, а вы мне доказываете, что ровно половина, середина и 1/2 - это именно половина, середина и 1/2. Это, по-моему, и дошкольнику понятно, что у ровно половины нет перевеса к какому-либо ближайшему числу ;D

что в климатических рядах может накопиться с десяток таких лет.
Так и пусть будут, они совсем незначительно, а лучше сказать, совсем никак не влияют на средню таких рядов.

Возьмём и сгенерируем по формуле апрели с условной средней в 7 градусов и стандартным отклонением в 2 градуса. Вот что получится за 143 апреля:

6,8656 сотые
6,8727 округление до десятых по правилу в большую.

Погрешность округления:
0.0071 (до десятых это 0.0)

Возьмём условный февраль по этой же формуле со средней -6 и отклонением 4:

-6.2163
-6.2196

Погрешность округление:
0.0033 (до десятых это 0.0)

Я ещё забыл добавить с утра, что помимо куда более существенных отклонений в виде погрешностей и подсчёту суток, а не дней есть же ещё и просто ошибки. Достаточно вспомнить хотя бы сайт Костяна ;D

так если я не ошибаюсь, при отрицательных значениях округление по такой методике идёт зеркально относительно нуля, "вверх по модулю", то есть вниз по факту. Или я не прав?
В Америке, вроде, в сторону положительной бесконечности округляют, т.е. -1.5 там -1

Онлайн Alter

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 7637
  • МО, Пушкино
    • Просмотр профиля
Re: Вопрос с округлениями
« Ответ #19 : 02 Июнь 2022, 18:35:47 »
Ilgiz, здесь все округляется в сторону большего. В январе 2020 округлялись отрицательные значения средних метеосуток: -0,15 превратилось в -0,1. Вчера вот +18,85 стало +18,9.
Vasilii, зрительный баланс в арифметики. Ну и чушь. Дошкольнику, может, и понятно, а мне нет.
На среднюю они не влияют, а на знак средней вполне могут. Выше уже написал, почему.
Но Вы взяли апрели со средней выше 0. Ну Ок. Берите, что хотите. То что в общем случае ошибки не столь значительны, я знал без Вас и указал это сразу. То, что в некоторых случаях они могут давать видимые погрешности, тоже очевидно. Так что Вы мне хотите доказать?
Случайно раз сгенерировали и получили малую ошибку - ну поздравляю. Только это не эксперимент, увы.
Один раз - даже не... А уж тем более единичный эксперимент не имеет веса в статистике.
Но лучше не пытайтесь проводить опыт тысячи раз. Легче все это посчитать по формулам вероятностей. С вероятностью процентов 5-10 это может повлиять на среднюю ряда вплоть до 10-х. Есть разница между "может" и "обычно не будет". Если в местности может случиться потоп
с вероятностью хоть 1%, а нет канализации - это хреновое дело. И отсылки к климату, что тут выпадает по 5 мм. в месяц, не помогут никак.