Округление чисел

Содержание:

Методы

В разных сферах могут применяться различные методы округления. Во всех этих методах «лишние» знаки обнуляют (отбрасывают), а предшествующий им знак корректируется по какому-либо правилу.

  • Округление к ближайшему целому — наиболее часто используемое округление, при котором число округляется до целого, модуль разности с которым у этого числа минимален. В общем случае, когда число в десятичной системе округляют до N-го знака, правило может быть сформулировано следующим образом:

    • если N+1 знак < 5, то N-й знак сохраняют, а N+1 и все последующие обнуляют;
    • если N+1 знак ≥ 5, то N-й знак увеличивают на единицу, а N+1 и все последующие обнуляют;
    Например: 11,9 → 12; −0,9 → −1; −1,1 → −1; 2,5 → 3.
    Максимальная дополнительная абсолютная погрешность, вносимая при таком округлении (погрешность округления), составляет ±0,5 последнего сохраняемого разряда.
  • Округление к большему (округление к +∞, округление вверх, англ. ceiling — досл. «потолок») — если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное. В экономическом жаргоне — округление в пользу продавца, кредитора (лица, получающего деньги). В частности, 2,6 → 3, −2,6 → −2. Погрешность округления — в пределах +1 последнего сохраняемого разряда.
  • Округление к меньшему (округление к −∞, округление вниз, англ. floor — досл. «пол») — если обнуляемые знаки не равны нулю, предшествующий знак сохраняют, если число положительное, или увеличивают на единицу, если число отрицательное. В экономическом жаргоне — округление в пользу покупателя, дебитора (лица, отдающего деньги). Здесь 2,6 → 2, −2,6 → −3. Погрешность округления — в пределах −1 последнего сохраняемого разряда.
  • Округление к большему по модулю (округление к бесконечности, округление от нуля) — относительно редко используемая форма округления. Если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу. Погрешность округления составляет +1 последнего разряда для положительных и −1 последнего разряда для отрицательных чисел.
  • Округление к меньшему по модулю (округление к нулю, целое англ. fix, truncate, integer) — самое «простое» округление, поскольку после обнуления «лишних» знаков предшествующий знак сохраняют, то есть технически оно состоит в отбрасывании лишних знаков. Например, 11,9 → 11; −0,9 → 0; −1,1 → −1). При таком округлении может вноситься погрешность в пределах единицы последнего сохраняемого разряда, причём в положительной части числовой оси погрешность всегда отрицательна, а в отрицательной — положительна.
  • Случайное округление — округление происходит в меньшую или большую сторону в случайном порядке, при этом вероятность округления вверх равна дробной части. Этот способ делает накопление ошибок случайной величиной с нулевым математическим ожиданием.

Общий механизм округления

В первую очередь потребуется определить разряд, до которого нужно округлить. А потом внимательно посмотреть на цифры справа от него. Если она всего одна, значение изменяется и записывается приближённое. Тогда как при нескольких манипуляции производятся последовательно — справа налево, двигаясь от младших разрядов к старшим. Базовые правила округления чисел:

  • последняя цифра является отбрасываемой, предыдущая — сохраняемой;
  • число остаётся неизменным, если убираемый разряд равен 4, 3, 2, 1 или 0;
  • сохраняемая цифра увеличивается на 1, если отбрасываемой является 9, 8, 7, 6 или 5.

Как округлить до ближайшего целого кратного (функция ОКРУГЛЕНИЕ)

Использование отрицательных значений с указанными выше функциями округления может помочь преобразовать ваши числа в ближайшие кратные 10, 100, 1000 и т. Д. Однако что, если вы хотите преобразовать значения в ближайшее кратное некоторого другого числа, например 2, 3, 15? , так далее.?

В Google Таблицах тоже есть кое-что для этого. Это позволяет вам использовать функцию MROUND. Эта функция работает так же, как функция ROUND, за исключением того, что позволяет округлять значение до ближайшего целого числа, кратного другому значению.

Синтаксис функции MROUND

Синтаксис функции ОКРУГЛ аналогичен синтаксису функции ОКРУГЛ:

MROUND(value, factor)

Здесь,

  • value — это число, которое нужно округлить.
  • factor — это число, до кратного которого значение будет округлено.

В отличие от функций ROUND, ROUNDDOWN и ROUNDUP, вы не можете использовать отрицательные значения во втором параметре функции MROUND, если первый параметр также не является отрицательным числом.

Примеры использования функции MROUND

Давайте посмотрим на несколько примеров, чтобы увидеть, как работает функция MROUND (ОКРУГЛЕНИЕ):

На изображении выше вы увидите, что:

  • В строке 2 функция ОКРУГЛ. Округляет значение 213,142 до ближайшего кратного 2 . Итак, получаем результат 214 .
  • Точно так же в строке 9 функция ОКРУГЛ. Округляет значение 565,142 до ближайшего числа, кратного 15 . Итак, получаем результат 570 .

В этом уроке мы показали вам, как округлять числа в Google Таблицах с помощью четырех различных функций округления в Google Таблицах. К ним относятся функции ROUND, ROUNDUP, ROUNDDOWN и MROUND.

Функция ROUND может помочь вам округлить значения в соответствии со стандартными правилами, а функция ROUNDUP гарантирует, что ваши значения всегда округляются в большую сторону. Точно так же функция ROUNDDOWN гарантирует, что ваши значения всегда округляются в меньшую сторону. С другой стороны, функция MROUND позволяет округлять значения до кратных некоторому целому числу.

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

Мы надеемся, что это руководство помогло вам понять различия между каждой из функций округления и то, как лучше всего использовать их в Google Таблицах.

Проверка: isFinite и isNaN

Помните эти специальные числовые значения?

  • (и ) — особенное численное значение, которое ведёт себя в точности как математическая бесконечность ∞.
  • представляет ошибку.

Эти числовые значения принадлежат типу , но они не являются «обычными» числами, поэтому есть функции для их проверки:

  • преобразует значение в число и проверяет является ли оно :

    Нужна ли нам эта функция? Разве не можем ли мы просто сравнить ? К сожалению, нет. Значение уникально тем, что оно не является равным ни чему другому, даже самому себе:

  • преобразует аргумент в число и возвращает , если оно является обычным числом, т.е. не :

Иногда используется для проверки, содержится ли в строке число:

Помните, что пустая строка интерпретируется как во всех числовых функциях, включая.

Сравнение

Существует специальный метод Object.is, который сравнивает значения примерно как , но более надёжен в двух особых ситуациях:

  1. Работает с : , здесь он хорош.
  2. Значения и разные: , это редко используется, но технически эти значения разные.

Во всех других случаях идентичен .

Этот способ сравнения часто используется в спецификации JavaScript. Когда внутреннему алгоритму необходимо сравнить 2 значения на предмет точного совпадения, он использует (Определение ).

Примеры

Округлите до сотых: 0,1436

На третьем месте после запятой цифра 3, поэтому вторую оставляем без изменений

Ответ: 0,14

Округлите до сотых: 54,1281

На третьем месте после запятой стоит цифра 8, значит вторую цифру мы увеличиваем на единицу.

Ответ: 54,13

Есть также случай, когда на втором месте после запятой стоит цифра 9, а на третьем — 5, 6, 7, 8 или 9. В таком случае при округлении до сотых мы должны прибавить к 9 единицу — получается 10. Мы пишем на втором месте 0, и уже к первой цифре после запятой прибавляем единицу.

Например, число 56,798 после округления будет иметь вид 56,8.

Внимание, только СЕГОДНЯ!

Как работать с функциями в Excel

Мы рассмотрели самый простой способ убрать лишние знаки. Использовать его довольно удобно, если менять сами данные в таблице нам не нужно. Теперь мы переходим к использованию различных функций. Но сначала я хочу напомнить вам, что это такое, а также как с ними работать.

Функции ускоряют и упрощают вычисления. Например, нам надо посчитать сумму в столбце, в котором 100 значений. Мы можем делать это самым прямым способом “1+20+30+43…” и так 99 раз. Или написать встроенную команду “СУММ”, указать диапазон ячеек, и программа за секунду сделает расчеты.

Первый способ

Чтобы вручную написать формулу в ячейке с использованием функции, обязательно нужно:

  1. Поставить знак =.
  2. Правильно указать название.
  3. Открыть круглую скобку.
  4. Указать через точку с запятой аргументы, то есть данные, которые будут использоваться.
  5. Закрыть скобку.

Что может выступать аргументом математических формул:

  • число,
  • формула,
  • диапазон ячеек.

Пример: функция “=СУММ(F21:F30)” посчитает сумму чисел, написанных в столбце F с позиции F21 до F30.

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

Второй способ

Если неудобно писать команды вручную, то можно воспользоваться библиотекой, которая находится во вкладке “Формулы”.

Нас в данный момент интересуют математические операции. Нажимаем на соответствующий раздел и выбираем нужную процедуру.

Откроется диалоговое окно, в котором легко понять, какие аргументы нужно указать. Заполните поля и нажмите “ОК”.

Неточные вычисления

Внутри JavaScript число представлено в виде 64-битного формата IEEE-754. Для хранения числа используется 64 бита: 52 из них используется для хранения цифр, 11 из них для хранения положения десятичной точки (если число целое, то хранится 0), и один бит отведён на хранение знака.

Если число слишком большое, оно переполнит 64-битное хранилище, JavaScript вернёт бесконечность:

Наиболее часто встречающаяся ошибка при работе с числами в JavaScript – это потеря точности.

Посмотрите на это (неверное!) сравнение:

Да-да, сумма и не равна .

Странно! Что тогда, если не ?

Но почему это происходит?

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

Другими словами, что такое ? Это единица делённая на десять — , одна десятая. В десятичной системе счисления такие числа легко представимы, по сравнению с одной третьей: , которая становится бесконечной дробью .

Деление на гарантированно хорошо работает в десятичной системе, но деление на – нет. По той же причине и в двоичной системе счисления, деление на обязательно сработает, а становится бесконечной дробью.

В JavaScript нет возможности для хранения точных значений 0.1 или 0.2, используя двоичную систему, точно также, как нет возможности хранить одну третью в десятичной системе счисления.

Числовой формат IEEE-754 решает эту проблему путём округления до ближайшего возможного числа. Правила округления обычно не позволяют нам увидеть эту «крошечную потерю точности», но она существует.

Пример:

И когда мы суммируем 2 числа, их «неточности» тоже суммируются.

Вот почему – это не совсем .

Не только в JavaScript

Справедливости ради заметим, что ошибка в точности вычислений для чисел с плавающей точкой сохраняется в любом другом языке, где используется формат IEEE 754, включая PHP, Java, C, Perl, Ruby.

Можно ли обойти проблему? Конечно, наиболее надёжный способ — это округлить результат используя метод toFixed(n):

Также можно временно умножить число на 100 (или на большее), чтобы привести его к целому, выполнить математические действия, а после разделить обратно. Суммируя целые числа, мы уменьшаем погрешность, но она все равно появляется при финальном делении:

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

Забавный пример

Попробуйте выполнить его:

Причина та же – потеря точности. Из 64 бит, отведённых на число, сами цифры числа занимают до 52 бит, остальные 11 бит хранят позицию десятичной точки и один бит – знак. Так что если 52 бит не хватает на цифры, то при записи пропадут младшие разряды.

Интерпретатор не выдаст ошибку, но в результате получится «не совсем то число», что мы и видим в примере выше. Как говорится: «как смог, так записал».

Два нуля

Другим забавным следствием внутреннего представления чисел является наличие двух нулей: и .

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

В большинстве случаев это поведение незаметно, так как операторы в JavaScript воспринимают их одинаковыми.

Способы округления чисел

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

Если используется стандартная библиотека math, то в начале кода её необходимо подключить. Сделать это можно, например, с помощью инструкции: .

math.ceil() — округление чисел в большую сторону

Функция получила своё имя от термина «ceiling», который используется в математике для описания числа, которое больше или равно заданному.

Любая дробь находится в целочисленном интервале, например, 1.2 лежит между 1 и 2. Функция определяет, какая из границ интервала наибольшая и записывает её в результат округления.

Пример:

math.ceil(5.15) # = 6
math.ceil(6.666) # = 7
math.ceil(5) # = 5

Важно помнить, что функция определяет наибольшее число с учётом знака. То есть результатом округления числа -0.9 будет 0, а не -1.

math.floor() — округление чисел в меньшую сторону

Функция округляет дробное число до ближайшего целого, которое меньше или равно исходному. Работает аналогично функции , но с округлением в противоположную сторону.

Пример:

math.floor(7.9) # = 7
math.floor(9.999) # = 9
math.floor(-6.1) # = -7

math.trunc() — отбрасывание дробной части

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

Примеры:

math.trunc(5.51) # = 5
math.trunc(-6.99) # = -6

Избавиться от дробной части можно с помощью обычного преобразования числа к типу int. Такой способ полностью эквивалентен использованию .

Примеры:

int(5.51) # = 5
int(-6.99) # = -6

Нормальное округление

Python позволяет реализовать нормальное арифметическое округление, использовав функцию преобразования к типу int.

И хотя работает по другому алгоритму, результат её использования для положительных чисел полностью аналогичен выводу функции floor(), которая округляет числа «вниз». Для отрицательных аналогичен функции ceil().

Примеры:

math.floor(9.999) # = 9
int(9.999) # = 9
math.ceil(-9.999) # = -9
int(-9.999) # = -9

Чтобы с помощью функции int() округлить число по математическим правилам, необходимо добавить к нему 0.5, если оно положительное, и -0.5, если оно отрицательное.

Тогда операция принимает такой вид: int(num + (0.5 if num > 0 else -0.5)). Чтобы каждый раз не писать условие, удобно сделать отдельную функцию:

def int_r(num):
    num = int(num + (0.5 if num > 0 else -0.5))
    return num

Функция работает также, как стандартная функция округление во второй версии Python (арифметическое округление).

Примеры:

int_r(11.5) # = 12
int_r(11.4) # = 11
int_r(-0.991) # = -1
int_r(1.391) # = 1

round() — округление чисел

round() — стандартная функция округления в языке Python. Она не всегда работает так, как ожидается, а её алгоритм различается в разных версиях Python.

В Python 2

Во второй версии Python используется арифметическое округление. Оно обладает постоянно растущей погрешностью, что приводит к появлению неточностей и ошибок.

Увеличение погрешности вызвано неравным количеством цифр, определяющих, в какую сторону округлять. Всего 4 цифры на конце приводят к округлению «вниз», и 5 цифр к округлению «вверх».

Помимо этого, могут быть неточности, например, если округлить число 2.675 до второго знака, получится число 2.67 вместо 2.68. Это происходит из-за невозможности точно представить десятичные числа типа «float» в двоичном коде.

В Python 3

В третьей версии Python используется банковское округление. Это значит, что округление происходит до самого близкого чётного.

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

Примеры:

round(3.5) # = 4
round(9.5) # = 10
round(6.5) # = 6
round(-6.5) # = -6
round(-7.5) # = -8

Но если вам по каким то причинам нужно округление как в Python 2, то можно воспользоваться функцией написанной нами выше на основе приведения к целому числу.

Округление до сотых

У функции есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.

Пример округления до нужного знака:

round(3.555, 2) # = 3.56
round(9.515,1) # = 9.5
round(6.657,2) # = 6.66

Как округлить числа в Google Таблицах

Функция ROUNDDOWN (ОКРУГЛ ВНИЗ) работает так же, как функция ROUND, за исключением того, что она всегда округляет значение в меньшую сторону.

Синтаксис функции ОКРУГЛ ВНИЗ такой же, как у функции ОКРУГЛ:

ROUNDDOWN(value, )

Примеры использования функции ROUNDDOWN

Давайте посмотрим на несколько примеров, чтобы увидеть, как работает функция ОКРУГЛ ВНИЗ:

Из приведенного выше изображения совершенно ясно, что функция ОКРУГЛ ВНИЗ всегда округляет значение до заданного количества десятичных знаков.

Подобно функции ОКРУГЛ, функция ОКРУГЛВНИЗ также поддерживает отрицательные значения для параметра мест.

Вот несколько примеров, которые помогут вам понять, как функция ОКРУГЛ ВНИЗ работает с отрицательными значениями параметров мест:

Округление с помощью эпсилона

Альтернативный метод JavaScript, позволяющий осуществить округление до десятых, был введен в ES6 (также известном, как JavaScript 2015). «Машинный эпсилон» обеспечивает разумный предел погрешности при сравнении двух чисел с плавающей запятой. Без округления, сравнения могут дать результаты, подобные следующим:

0.1 + 0.2 === 0.3
> false

Math.EPSILON может быть использован в функции для получения корректного сравнения:

function epsEqu(x, y) {
    return Math.abs(x - y) < Number.EPSILON * Math.max(Math.abs(x), Math.abs(y));
}

Функция принимает два аргумента: один содержит вычисления, второй ожидаемый (округленный) результат. Она возвращает сравнение этих двух параметров:

epsEqu(0.1 + 0.2, 0.3)
> true

Все современные браузеры поддерживают математические функции ES6. Но если необходимо обеспечить поддержку в старых браузерах, то нужно использовать полифиллы.

Как округлить число до десятков

Правило округления числа до десятков

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

Если первая из отброшенных цифр 0, 1, 2, 3 или 4, то предыдущую цифру не изменяем.

Если первая из отброшенных цифр 5, 6, 7, 8 или 9, то предыдущую цифру увеличиваем на единицу.

Примеры округления числа до десятков:

\ Чтобы округлить число до десятков, цифру в разряде единиц (то есть последнюю цифру в записи натурального числа) заменяем нулем. Так как эта цифра равна 3, предыдущую цифру не изменяем. Читают: «Пятьсот восемьдесят три приближенно равно пятьсот восемьдесят».

\ Округляем до десятков, поэтому цифру в разряде единиц заменяем на нуль. Поскольку эта цифра — 7, предыдущую увеличиваем на единицу. Читают: «Тысяча тридцать семь приближенно равно тысяча сорок».

\ Округляя десятичную дробь до десятков, цифру в разряде единиц (то есть последнюю цифру перед запятой) заменяем нулем, а запятую и все стоящие после нее цифры отбрасываем. Замененная на нуль цифра — 2, значит предыдущую цифру изменять не надо. Читают: «Триста пятьдесят две целых семьдесят восемь сотых приближенно равно триста пятьдесят».

\ Чтобы округлить данную десятичную дробь до десятков, цифру в разряде единиц заменяем нулем, а цифры, стоящие после запятой, отбрасываем. Так как замененная нулем цифра равна 6, к предыдущей цифре прибавляем единицу. Читают: «Две тысячи четыреста семьдесят шесть целых пять сотых приближенно равно две тысячи четыреста восемьдесят».

\ Округляя десятичную дробь до десятков, в разряде единиц заменяем цифру нулем, а запятую и все, что стоит после запятой, отбрасываем. Поскольку на нуль заменили 9, то предыдущую цифру увеличиваем на единицу. Читают: «Семьсот девяносто девять целых, одна десятая приближенно равно восемьсот».

Округление при работе с числами ограниченной точности

Реальные физические величины всегда измеряются с некоторой конечной точностью, которая зависит от приборов и методов измерения и оценивается максимальным относительным или абсолютным отклонением неизвестного истинного значения от измеренного, что в десятичном представлении значения соответствует либо определённому числу значащих цифр, либо определённой позиции в записи числа, все цифры после (правее) которой являются незначащими (лежат в пределах погрешности измерения). Сами измеренные параметры записываются с таким числом знаков, чтобы все цифры были надёжными, возможно, последняя — сомнительной. Погрешность при математических операциях с числами ограниченной точности сохраняется и изменяется по известным математическим законам, поэтому когда в дальнейших вычислениях возникают промежуточные значения и результаты с больши́м числом цифр, из этих цифр только часть являются значимыми. Остальные цифры, присутствуя в значениях, фактически не отражают никакой физической реальности и лишь отнимают время на вычисления. Вследствие этого промежуточные значения и результаты при вычислениях с ограниченной точностью округляют до того количества знаков, которое отражает реальную точность полученных значений. На практике обычно рекомендуется при длинных «цепочных» ручных вычислениях сохранять в промежуточных значениях на одну цифру больше. При использовании компьютера промежуточные округления в научно-технических приложениях чаще всего теряют смысл, и округляется только результат.

Так, например, если задана сила 5815 гс с точностью до грамма силы и длина плеча 1,40 м с точностью до сантиметра, то момент силы в кгс по формуле M=(mg)⋅h{\displaystyle M=(mg)\cdot h}, в случае формального расчёта со всеми знаками, окажется равным: 5,815 кгс • 1,4 м = 8,141 кгс•м. Однако если учесть погрешность измерения, то мы получим, что предельная относительная погрешность первого значения составляет 1/5815 ≈ 1,7•10−4, второго — 1/140 ≈ 7,1•10−3, относительная погрешность результата по правилу погрешности операции умножения (при умножении приближённых величин относительные погрешности складываются) составит 7,3•10−3, что соответствует максимальной абсолютной погрешности результата ±0,059 кгс•м! То есть в реальности, с учётом погрешности, результат может составлять от 8,082 до 8,200 кгс•м, таким образом, в рассчитанном значении 8,141 кгс•м полностью надёжной является только первая цифра, даже вторая — уже сомнительна! Корректным будет округление результата вычислений до первой сомнительной цифры, то есть до десятых: 8,1 кгс•м, или, при необходимости более точного указания рамок погрешности, представить его в виде, округлённом до одного-двух знаков после запятой с указанием погрешности: 8,14 ± 0,06 кгс•м.

Округление рассчитанного значения погрешности

Обычно в окончательном значении рассчитанной погрешности оставляют только первые одну-две значащие цифры. По одному из применяемых правил, если значение погрешности начинается с цифр 1 или 2(по другому правилу — 1, 2 или 3), то в нём сохраняют две значащих цифры, в остальных случаях — одну, например: 0,13; 0,26; 0,3; 0,8. То есть каждая декада возможных значений округляемой погрешности разделена на две части. Недостаток этого правила состоит в том, что относительная погрешность округления изменяется значительным скачком при переходе от числа 0,29 к числу 0,3. Для устранения этого предлагается каждую декаду возможных значений погрешности делить на три части с менее резким изменением шага округления. Тогда ряд разрешённых к употреблению округлённых значений погрешности получает вид:

  • 0,10; 0,12; 0,14; 0,16; 0,18;
  • 0,20; 0,25; 0,30; 0,35; 0,40; 0,45;
  • 0,5; 0,6; 0,7; 0,8; 0,9; 1,0.

Однако при использовании такого правила последние цифры самого результата, оставляемые после округления, также должны соответствовать приведённому ряду.

Пересчёт значений физических величин

Пересчёт значения физической величины из одной системы единиц в другую должен производиться с сохранением точности исходного значения. Для этого исходное значение в одних единицах следует умножить (разделить) на переводной коэффициент, часто содержащий большое количество значащих цифр, и округлить полученный результат до количества значащих цифр, обеспечивающего точность исходного значения. Например, при пересчёте значения силы 96,3 тс в значение, выраженное в килоньютонах (кН), следует умножить исходное значение на переводной коэффициент 9,80665 (1 тс = 9,80665 кН). В результате получается значение 944,380395 кН, которое необходимо округлить до трёх значащих цифр. Вместо 96,3 тс получаем 944 кН.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *