Что значит округлить до целого значения
Округление чисел является одной из наиболее распространенных операций в программировании. Округление до целого значения позволяет привести число к ближайшему целому числу, без учета его десятичной части. Эта операция широко применяется в различных областях, таких как математика, физика, финансы, а также в программировании и анализе данных.
Округление до целого значения осуществляется с помощью разных методов, в зависимости от требуемого результата. Наиболее распространенные методы округления – это округление вниз (к меньшему целому числу), округление вверх (к большему целому числу), округление до ближайшего целого числа (в сторону наиболее близкого целого числа) и округление к нулю (удаление десятичной части без округления).
Применение округления до целого значения может быть различным в зависимости от контекста. Например, в финансовой сфере округление используется для обработки валютных операций и расчетов, где необходимо представление цен и сумм в денежных единицах без десятичной части. В программировании округление может быть полезным при работе с числами с плавающей запятой, когда требуется точность представления данных или выполнение определенных условий.
Что такое округление
Округление до ближайшего целого числа производится путём увеличения десятичной части числа на 0.5 и отбрасывания всех десятичных знаков после запятой. Если десятичная часть числа меньше 0.5, то число округляется вниз, если десятичная часть числа больше или равна 0.5, то число округляется вверх.
Округление до ближайшего чётного числа производится путём отбрасывания десятичной части числа и определения ближайшего чётного числа. Если число является положительным и имеет дробную часть равной 0.5, то оно округляется вверх к ближайшему чётному числу. Если число является отрицательным и имеет дробную часть равной 0.5, то оно округляется вниз к ближайшему чётному числу.
Округление вниз производится путём отбрасывания всех десятичных знаков после запятой и превращения числа в меньшее целое значение. Округление вверх производится увеличением десятичной части числа на 1 и превращением числа в большее целое значение.
Округление на практике используется в различных сферах, таких как математика, финансы, программирование и статистика. Например, при расчете налоговых сумм, в банковском деле при подсчете доли процента, в программировании при работе с деньгами или при анализе статистических данных.
Зачем нужно округление
1. Упрощение вычислений: Округление чисел делает вычисления более удобными и понятными. Например, при работе с финансовыми данными, округление может использоваться для удобства подсчета суммы или прибыли. Также округление может быть полезным при анализе статистических данных.
2. Представление результатов: Округление позволяет представить числа более компактно и понятно. Например, при отображении дробных чисел на графиках или в таблицах, округление помогает избежать слишком длинных и сложных значений.
3. Соблюдение требований: В некоторых ситуациях округление чисел может быть необходимо для соблюдения требований или правил. Например, при подсчете налогов или при расчете зарплаты, округление может быть обязательным по правилам законодательства или внутренним политикам компании.
Общая цель округления чисел – привести числа к более простому и понятному виду, упростить вычисления и обеспечить соблюдение требований или правил в различных ситуациях.
Способы округления
- Округление вверх: при данном способе число округляется до наибольшего целого значения. Если десятичная часть числа больше 0, то число увеличивается до целого следующего числа.
- Округление вниз: при этом способе число округляется до наименьшего целого значения. Если десятичная часть числа больше 0, то число уменьшается до целого предыдущего числа.
- Округление к ближайшему: число округляется до ближайшего целого значения. Если десятичная часть числа меньше или равна 0.5, то число уменьшается до наиболее близкого уменьшенного целого числа. Если десятичная часть числа больше 0.5, то число увеличивается до наиболее близкого увеличенного целого числа.
- Округление к ближайшему четному: при данном способе число округляется до ближайшего четного целого значения. Если десятичная часть числа равна 0.5, то число округляется до четного целого значения.
Выбор способа округления зависит от задачи и требований, которые нужно выполнить. При округлении чисел необходимо учитывать числовые характеристики конкретной задачи и правила масок округления.
Округление в математике
Самым распространенным способом округления является округление до ближайшего целого значения. При таком округлении число округляется до ближайшего целого числа (наиболее близкого сверху или снизу). Например, число 3.6 округляется до 4, а число 3.4 округляется до 3.
Округление в математике применяется во многих областях. Оно используется, например, при работе с финансовыми данными, когда требуется точность до целого значения. Округление также применяется при работе с научными данными, чтобы упростить их анализ и интерпретацию.
Для округления в математике часто используются специальные функции или методы. Например, в языке программирования Python для округления числа до ближайшего целого значения используется функция round().
Округление в программировании
Существует несколько методов округления чисел в программировании, каждый из которых имеет свои особенности и подходит для определенного вида задач.
Округление вниз: Этот метод округления приводит десятичное число к наиболее близкому меньшему целому значению. Например, число 3.8 будет округлено до 3.
Округление вверх: В отличие от округления вниз, округление вверх приводит десятичное число к наиболее близкому большему целому значению. Таким образом, число 3.3 будет округлено до 4.
Округление к ближайшему целому: Этот метод округления приводит десятичное число к наиболее близкому целому значению. Если десятичная часть числа меньше 0.5, число округляется вниз, иначе вверх. Например, число 3.4 будет округлено до 3, а число 3.6 — до 4.
Округление к четному числу: Этот метод округления используется, когда необходимо округлить десятичное число до ближайшего четного значения. Если число уже является четным, оно остается без изменений. Если число нечетное, оно округляется до ближайшего четного числа. Например, число 3.5 будет округлено до 4, а число 2.9 — до 2.
Важно помнить, что различные языки программирования могут использовать разные методы округления и иметь собственные функции или операторы для этой операции.
Округление чисел: как это работает и для чего нужно
Когда мы работаем с числами, зачастую возникает необходимость округлить их до определенного значения. Округление — это процесс приближения числа к ближайшему целому числу или другому заданному значению. Оно используется для удобства представления данных и облегчения вычислений.
Округление чисел может происходить по разным правилам, включая округление вверх, вниз, к ближайшему четному числу или заданному количеству десятичных знаков. Оно осуществляется путем анализа десятичного разряда следующего числа: если он больше или равен пяти, число округляется в большую сторону, в противном случае число округляется в меньшую сторону.
Округление чисел избавляет нас от избыточности и облегчает работу с числовыми значениями в различных областях, включая финансы, математику, программирование и многое другое.
Что такое округление чисел?
Часто нам приходится работать с числами, которые имеют множество десятичных знаков после запятой. Но что делать, когда нужно показать эти числа в более простом и удобном виде? В таких случаях нам на помощь приходит округление чисел.
Округление чисел — это процесс приведения числа к ближайшему целому или определенному числу знаков после запятой. Это позволяет нам упростить или приблизить значение числа, чтобы оно было более понятным и удобным в использовании.
Округление чисел может быть положительным или отрицательным. Положительное округление приводит число к ближайшему большему значению, тогда как отрицательное округление приводит число к ближайшему меньшему значению.
Когда мы округляем число, мы можем выбрать точность округления — количество знаков после запятой, до которого мы хотим округлить число. Например, если у нас есть число 3.14159 и мы хотим округлить его до двух десятичных знаков, то мы получим 3.14.
Округление используется во множестве сфер и областей нашей жизни. Например, в финансовой отчетности округление используется для представления денежных сумм в более удобном виде. Также округление применяется в науке и инженерных расчетах, где точность чисел может иметь большое значение.
На практике округление чисел выполняется с помощью определенных правил. В зависимости от значения следующей цифры после знака, которое мы хотим округлить, мы можем выбрать, должны ли мы округлить число вверх или вниз. Например, если следующая цифра после знака 5 или более, то мы округляем число вверх. Если следующая цифра после знака меньше 5, то мы округляем число вниз.
Также важно отметить, что округление чисел может влиять на точность и результаты наших вычислений. Поэтому при округлении чисел необходимо быть внимательным и понимать, какие правила округления применяются и как они могут влиять на наши данные и результаты.
Как работает округление до целых чисел
В программировании и математике округление до целых чисел обычно делается по определенным правилам. Существуют разные алгоритмы округления, но самое распространенное из них — это округление «к ближайшему целому». Это означает, что десятичное число округляется до ближайшего целого числа, а если число находится на полпути между двумя целыми числами, то оно округляется до четного числа.
Для округления до целого числа мы используем правило «ближайшего целого». Если десятичное число имеет дробную часть меньше 0,5, то оно округляется вниз, то есть к меньшему целому числу. Если дробная часть больше или равна 0,5, то число округляется вверх, то есть к большему целому числу.
Например, рассмотрим число 3.2. Округление до ближайшего целого даст нам число 3, так как дробная часть (0.2) меньше 0,5. Но если мы округлим число 3.8, то получим 4, так как дробная часть (0.8) больше или равна 0,5.
Однако есть и другие правила округления, которые могут использоваться в разных ситуациях. Например, в некоторых случаях округление может быть сделано всегда вверх или всегда вниз, независимо от дробной части числа. Чаще всего это используется в финансовых операциях, чтобы избежать ошибок округления в денежных расчетах.
Также стоит заметить, что при округлении до целых чисел мы теряем доли и точность. Иногда округление может привести к незначительной потере точности, поэтому в некоторых вычислениях это следует учитывать.
Понимание того, как работает округление до целых чисел, позволяет нам более точно и эффективно работать с числами. Это незаменимый инструмент во многих областях, таких как финансы, статистика, программирование и учет.
Как работает округление до заданного числа десятичных знаков
Давайте представим ситуацию: у вас есть число с десятичной дробью, но вы хотите округлить его до заданного числа десятичных знаков. Как это работает?
Чтобы разобраться, давайте рассмотрим пример. Представьте, что у вас есть число 3.14159, и вы хотите округлить его до двух десятичных знаков. В этом случае, первым шагом будет определить, на какой позиции стоит цифра, на основе которой происходит округление. В нашем случае, это десятые доли (потому что они следуют сразу за точкой).
Теперь, когда мы знаем, какие десятичные знаки мы хотим сохранить, мы можем приступить к самому процессу округления. Для этого мы рассматриваем следующий знак после заданного числа десятичных знаков и принимаем решение, как округлить число в зависимости от этого знака.
Если следующий знак больше или равен пяти, то мы округляем число до большего значения. В нашем примере, следующий знак после двух десятичных знаков — это 5. Поскольку 5 больше или равно 5, мы округляем число до ближайшего большего значения, и получаем 3.14.
Если следующий знак меньше пяти, мы округляем число до меньшего значения. Например, если у нас есть число 3.146, и мы хотим округлить его до двух десятичных знаков, следующий знак после двух десятичных знаков — это 6. Поскольку 6 меньше 5, мы округляем число до ближайшего меньшего значения, и получаем 3.14.
Таким образом, в процессе округления мы смотрим на следующий знак после заданного числа десятичных знаков и принимаем решение, как округлить число в зависимости от этого знака. Если знак больше или равен пяти, мы округляем число до ближайшего большего значения, а если знак меньше пяти, мы округляем число до ближайшего меньшего значения.
Важно понимать, что округление до заданного числа десятичных знаков не всегда приводит к точному результату. Например, при округлении числа 3.145 до двух десятичных знаков, мы получим 3.14, что не является точным значением. Округление всегда вносит некоторую погрешность, поэтому в некоторых случаях может потребоваться более точная математическая обработка числа.
Правила округления отрицательных чисел
Но что происходит с отрицательными числами? Важно понимать, что с отрицательными числами правила округления также действуют, но возникают некоторые специфические моменты, которые необходимо учесть.
Когда мы округляем отрицательные числа, основное правило все так же остается прежним: если десятичная часть числа больше или равна 0.5, мы округляем число в большую сторону, если меньше – округляем число в меньшую сторону. Например, если у нас есть число -4.7, мы округляем его до -5, так как 0.7 больше или равно 0.5.
Однако, есть одно важное правило для округления отрицательных чисел, отличное от округления положительных чисел. Когда десятичная часть отрицательного числа равна 0.5, вместо округления до ближайшего четного числа, как в положительных числах, мы всегда округляем в меньшую сторону с целью сохранения согласованности с математическими правилами.
Например, если у нас есть число -8.5, базовое правило округления говорит нам, что мы должны округлить его до -9, так как десятичная часть равна 0.5. Это происходит потому, что округление до ближайшего четного числа может нарушать математическую согласованность.
Таким образом, при округлении отрицательных чисел нужно обязательно учесть особое правило для чисел с десятичной частью, равной 0.5. Не забывайте применять это правило, чтобы получить правильное округленное значение отрицательных чисел.
Округление чисел: что это такое и как работает округление
Существуют различные правила округления, которые определяют, какое значение будет выбрано при округлении. Одним из самых распространенных правил округления является правило «ближайшего к четному». При использовании этого правила, если число, которое округляется, находится на полпути между двумя целыми числами, то выбирается ближайшее четное число.
Например, если необходимо округлить число 2.5 по правилу «ближайшего к четному», то оно будет округлено до 2. Если необходимо округлить число 3.5 по тому же правилу, то оно будет округлено до 4.
Также существуют и другие правила округления, такие как правило «вниз», при котором число округляется до наибольшего меньшего числа, и правило «вверх», при котором число округляется до наименьшего большего числа. Эти правила могут использоваться в зависимости от требуемой точности и контекста использования.
Компьютерные программы часто используют различные алгоритмы для округления чисел, которые могут быть основаны на разных правилах округления. Важно помнить, что округление чисел может приводить к потере точности, особенно при работе с десятичными дробями. Поэтому необходимо внимательно выбирать правило округления в зависимости от требований задачи.
Округление: как это работает?
Округление является одним из важных математических операций, которая используется во многих сферах жизни. Оно позволяет приблизительно значение числа до определенного количества знаков после запятой. Принципы округления часто используются в науке, финансовой сфере, программировании и повседневной жизни.
Округление производится в соответствии с определенными правилами. Если десятичная часть числа меньше 0,5, то число округляется вниз (отбрасывается). Например, число 2,3 округляется до 2. Если десятичная часть числа больше или равна 0,5, то число округляется вверх (увеличивается на 1). Например, число 2,7 округляется до 3.
Существуют также другие правила округления, например, округление в сторону ближайшего четного числа (округление «к четности»). В этом случае, если десятичная часть числа равна 0,5, то число округляется к ближайшему четному числу. Например, число 2,5 округляется до 2, а число 3,5 округляется до 4.
Округление также может применяться не только к десятичным числам, но и к числам с другими системами счисления. Например, при округлении двоичных чисел, применяются аналогичные правила, но с учетом двоичной системы счисления.
Важно понимать, что округление может привести к некоторым искажениям значений, особенно при больших погрешностях. Поэтому в некоторых случаях может потребоваться использование более точных алгоритмов округления или использование других методов обработки чисел. В программировании также существует большое количество специальных функций и библиотек для работы с округлением и обработкой чисел с плавающей запятой.
Принципы округления чисел
Округление чисел может быть двух типов: округление вверх и округление вниз.
- Округление вверх: при округлении число заменяется на наименьшее целое число, большее или равное исходному числу.
- Округление вниз: при округлении число заменяется на наибольшее целое число, меньшее или равное исходному числу.
Для округления чисел с плавающей запятой или с десятичными разрядами часто используется правило «покрытия». Согласно этому правилу, если цифра, на которую производится округление, больше либо равна 5, то округление происходит вверх. В противном случае округление происходит вниз.
Округление чисел может быть также проведено до определенного количества значащих цифр. Например, при округлении до одной значащей цифры число 4.36 округляется до 4.4, т.к. 6 больше или равно 5.
Важно учитывать контекст, в котором производится округление числа, чтобы получить точный и ожидаемый результат. Кроме того, в спецификации языка программирования могут быть определены собственные правила округления чисел.
Методы округления в математике и программировании
Одним из самых распространенных методов округления является «математическое» округление или «округление по правилам арифметики». По этому правилу, если число имеет десятичную дробь, то оно округляется до ближайшего целого числа. Если дробная часть числа равна 0.5, то число округляется вверх до ближайшего целого числа. Например, число 1.5 округляется до 2, а число 1.4 округляется до 1.
Еще одним методом округления является «округление вниз» или «округление вниз до целого числа». По этому правилу, число округляется всегда вниз, независимо от дробной части. Например, число 1.5 округляется до 1, а число 1.4 также округляется до 1.
Третьим методом округления является «округление вверх» или «округление вверх до ближайшего целого числа». По этому правилу, число округляется всегда вверх, независимо от дробной части. Например, число 1.5 округляется до 2, а число 1.4 округляется до 2.
Кроме того, в программировании также часто используется «банковское» округление или «округление с половинным отбрасыванием». По этому правилу, число округляется таким образом, чтобы дробная часть равнялась 0, 0.5 или 0.9, а все остальные значения округляются вниз. Например, число 1.5 округляется до 2, а число 1.4 округляется до 1.
- Математическое округление: округляет число до ближайшего целого числа.
- Округление вниз: округляет число вниз, всегда отбрасывая дробную часть.
- Округление вверх: округляет число вверх, всегда прибавляя единицу к целой части.
- Банковское округление: округляет число так, чтобы дробная часть была равна 0, 0.5 или 0.9.
Выбор метода округления зависит от конкретной задачи и требований. Важно учитывать особенности каждого метода и используемые алгоритмы округления, чтобы корректно обрабатывать числа в программировании и избежать ошибок.
Округление в стандарте IEEE 754
Стандарт IEEE 754 устанавливает правила округления для операций с плавающей точкой. В этом стандарте определены два основных режима округления: округление к ближайшему четному числу (также известное как округление по стандарту «банковского» округления) и округление к ближайшему числу в большую сторону.
Округление к ближайшему четному числу используется, когда входное число находится точно посередине между двумя целыми числами. В этом случае округление производится к ближайшему четному числу. Например, число 3.5 округляется до 4, а число 4.5 округляется до 4.
Округление к ближайшему числу в большую сторону используется, когда входное число находится ближе к следующему целому числу. В этом случае округление производится к следующему целому числу. Например, число 3.5 округляется до 4, а число 4.5 округляется до 5.
Стандарт IEEE 754 также определяет специальные случаи округления, когда входное число является бесконечностью, NaN (не число) или нулем. В таких случаях округление не производится, а результат остается без изменений.
Примеры применения округления
Округление часто используется в математике, физике, программировании и других областях, где точные значения могут быть слишком сложны или несоответствующие. Вот некоторые примеры применения округления.
- Финансы: Округление используется в финансовых расчетах для представления денежных сумм. Например, при расчете налога или округлении цен товаров.
- Статистика: Округление применяется в статистике для представления результатов исследований. Например, при округлении среднего значения или процентного соотношения.
- Геометрия: Округление используется в геометрии для работы с точками и отрезками. Например, при определении координат точек на плоскости или округлении длины отрезка.
- Время: Округление применяется в работе со временем. Например, при округлении времени до ближайшего часа или минуты.
- Программирование: Округление широко используется в программировании для обработки данных и выполнения математических операций. Например, при округлении результатов вычислений или работы с числами с плавающей запятой.
Для чего было введено округление к ближайшему четному
Часто вычисления дают результаты, которые не соответствуют пределам нужных диапазонов. В результате нужно осуществлять JavaScript округление до определенного значения.
Для чего округлять числа?
JavaScript не хранит целые числа, поскольку их значения представлены в виде цифр с плавающей точкой. Многие дроби не могут быть представлены числом с определенным конечным количеством знаков после запятой, поэтому JavaScript может генерировать результаты, наподобие приведенного ниже:
0.1 * 0.2; > 0.020000000000000004
На практике это не будет иметь никакого значения, поскольку речь идет о погрешности в 2 квинтилионные. Но это может отразиться на результате при работе с числами, которые представляют значения валют, процентов или размер файла. Поэтому нужно сделать JavaScript округление до целых или до определенного знака после запятой.
Округление десятичных чисел
Чтобы « обрезать » десятичное число, используются методы toFixed() или toPrecision() . Они оба принимают один аргумент, который определяет количество значимых и знаков после запятой, которые должны быть включены в результат:
- если для toFixed() аргумент не определен, значение по умолчанию равно 0 , то есть без знаков после запятой; максимальное значение аргумента равно 20 ;
- если для toPrecision() аргумент не задан, число не изменяется.
var randNum = 6.25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" var randNum = 87.335; randNum.toFixed(2); > "87.33" var randNum = 87.337; randNum.toPrecision(3); > "87.3"
И toFixed() , и toPrecision возвращают округленное строчное представление результата, а не число. Это означает, что прибавление rounded к randNum в результате даст конкатенацию строк, а не одно число:
console.log(randNum + rounded); > "6.256"
Если нужно получить в результате JavaScript округление до сотых, используйте parseFloat() :
var randNum = 6.25; var rounded = parseFloat(randNum.toFixed(1)); console.log(rounded); > 6.3
toFixed() и toPrecision() также являются полезными методами для усечения большого количества знаков после запятой. Это удобно при работе с числами, представляющими денежные единицы:
var wholeNum = 1 var dollarsCents = wholeNum.toFixed(2); console.log(dollarsCents); > "1.00"
Обратите внимание, что если в числе больше знаков, чем задано параметром точности, toPrecision будет выдавать результат в научном формате:
var num = 123.435 num.toPrecision(2); > "1.2e+2"
Как избежать ошибок при округлении десятичных дробей
В некоторых случаях toFixed и toPrecision осуществляют JavaScript округление в меньшую сторону , а не округление в большую сторону:
var numTest = 1.005; numTest.toFixed(2); > 1;
Результатом приведенного выше примера должно быть 1.01, а не 1. Если нужно избежать этой ошибки, я рекомендую использовать экспоненциальные числа:
function round(value, decimals)
round(1.005,2); > 1.01
Если нужно еще более надежное решение, чем округление, оно доступно на MDN .
Округление с помощью эпсилона
Альтернативный метод JavaScript, позволяющий осуществить округление до десятых, был введен в ES6 ( также известном, как JavaScript 2015 ). «Машинный эпсилон» обеспечивает разумный предел погрешности при сравнении двух чисел с плавающей запятой. Без округления, сравнения могут дать результаты, подобные следующим:
0.1 + 0.2 === 0.3 > false
Math.EPSILON может быть использован в функции для получения корректного сравнения:
function epsEqu(x, y)
Функция принимает два аргумента : один содержит вычисления, второй ожидаемый ( округленный ) результат. Она возвращает сравнение этих двух параметров:
epsEqu(0.1 + 0.2, 0.3) > true
Все современные браузеры поддерживают математические функции ES6 . Но если необходимо обеспечить поддержку в старых браузерах, то нужно использовать полифиллы.
Усечение десятичных чисел
Все методы, представленные ранее, выполняют JavaScript округление до десятых . Чтобы усечь положительное число до двух знаков после запятой, умножить его на 100 , усечь снова, а затем полученный результат разделить на 100 , нужно:
function truncated(num) < return Math.trunc(num * 100) / 100; >truncated(3.1416) > 3.14
Если требуется что-то более гибкое, можно воспользоваться побитовым оператором:
function truncated(num, decimalPlaces) < var numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; >
var randInt = 35.874993; truncated(randInt,3); > 35.874
Округление до ближайшего числа
Чтобы осуществить округление до целого , используется Math.round JavaScript :
Math.round(4.3) > 4 Math.round(4.5) > 5
Обратите внимание, что » половинные значения «, такие как .5 , округляются вверх.
Округление в меньшую сторону до ближайшего целого числа
Если вы хотите округлять в меньшую сторону, используйте метод Math.floor() :
Math.floor(42.23); > 42 Math.floor(36.93); > 36
Округление » вниз » имеет одно направление для всех чисел, в том числе и для отрицательных. Это можно представить, как небоскреб с бесконечным количеством этажей, в том числе и ниже уровня фундамента ( представляющих отрицательные числа ). Если вы находитесь в лифте между подвальными этажами 2 и 3 ( что соответствует значению -2.5 ), Math.floor доставит вас на этаж -3 :
Math.floor(-2.5); > -3
Если нужно избежать этого, используйте JavaScript Math округление с помощью Math.trunc() , поддерживаемый во всех современных браузерах ( кроме IE / Edge ):
Math.trunc(-41.43); > -41
Округление в большую сторону до ближайшего целого числа
Если вы хотите округлить десятичные числа вверх, используйте Math.ceil . Действие этого метода также можно представить, как бесконечный лифт: Math.ceil всегда везет вас » вверх «, независимо от того, является ли число отрицательным или положительным:
Math.ceil(42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36.93); -36
Округление до ближайшего кратного числа
Если нужно округлить значение до ближайшего числа, кратного 5 , создайте функцию, которая делит число на 5 , округляет его, а затем умножает результат на то же значение:
function roundTo5(num) < return Math.round(num/5)*5; >
roundTo5(11); > 10
Если нужно выполнить JavaScript округление до двух знаков, можно передавать функции, как начальное число, так и кратность:
function roundToMultiple(num, multiple) < return Math.round(num/multiple)*multiple; >
Чтобы использовать функцию, включите в ее вызов округляемое число и кратность:
var initialNumber = 11; var multiple = 10; roundToMultiple(initialNumber, multiple); > 10;
Чтобы округлять значения только в большую или меньшую сторону замените в функции round на ceil или floor .
Привязка к диапазону
Иногда нужно получить значение х , которое должно находиться в пределах определенного диапазона. Например, нужно значение от 1 до 100 , но мы получаем значение 123 . Чтобы исправить это, можно использовать min() ( возвращает наименьшее из чисел ) и max ( возвращает максимально допустимое число ).
var lowBound = 1; var highBound = 100; var numInput = 123; var clamped = Math.max(lowBound, Math.min(numInput, highBound)); console.log(clamped); > 100;
Можно создать функцию или расширение класса Number :
Number.prototype.clamp = function(min, max) < return Math.min(Math.max(this, min), max); >;
(numInput).clamp(lowBound, highBound);
Округление по Гауссу
Округление по Гауссу (» банковское «, конвергентное или голландское ) представляет собой метод округления без статистической погрешности. Стандартное JavaScript округление иногда дает погрешности в большую сторону. Округление по Гауссу позволяет избежать этой погрешности с помощью округления до ближайшего четного числа. Лучшее решение, которое мне известно:
function gaussRound(num, decimalPlaces) < var d = decimalPlaces || 0, m = Math.pow(10, d), n = +(d ? num * m : num).toFixed(8), i = Math.floor(n), f = n - i, e = 1e-8, r = (f >0.5 - e && f < 0.5 + e) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n); return d ? r / m : r; >
gaussRound(2.5) > 2 gaussRound(3.5) > 4 gaussRound(2.57,1) > 2.6
Десятичные числа в CSS
Так как JavaScript часто используется для получения информации о позиции или преобразования HTML-элементов , то можно задаться вопросом, что произойдет, если мы сгенерируем десятичные значения для элементов:
Современные браузеры поддерживают десятичные значения в блочной модели, в том числе процентные и пиксельные единицы.
Научный форум dxdy
хотел округлить важное число в своей жизни, но не смог этого сделать.
читаю правила по арифметике:
Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
и у меня возник интересный, как для не математика, вопрос: а чем нечетные цифры лучше четных? Число котороя я округлял действительно важное, и получается что меня подставила какая-то арифметика, а кому-то она наоборот помогла.
Re: логика математики для биолога
21.07.2008, 01:07
alex_kol писал(а):
и у меня возник интересный, как для не математика, вопрос: а чем нечетные цифры лучше четных?
В случае округления — предположу, что потому, что 0 — четное число.
Тип округления к ближайшему четному называется банковским округлением.
Если складывать много чисел, округляя .5 всегда в большую сторону, то возникнет перекос, который будет тем больше, чем больше чисел мы складываем. Банковское округление позволяет минимизировать этот перекос. В этом случае половина округляется к ближайшему четному.
Re: логика математики для биолога
21.07.2008, 01:23
alex_kol писал(а):
Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
Честно говоря, никогда этим не интересовался. С моей (сугубо практической) точки зрения — округлять надобно до ближайшего целого, ну а выпадет судьба на пятёрку — так какая разница. Обычно принято округлять в этом случае просто вверх.
Не уверен, что это правило имеет хоть какое-то практическое значение. Но, может, и имеет.
Тогда соотв. теорема должна выглядеть примерно так: при указанном способе округления матожидание результата ближе к истинному значению, чем при том вульгарном, которое я описывал.
Не уверен, что это имеет хоть какое-то практическое значение. И почти уверен: даже эта изысканная оценка не является несмещённой.
Re: логика математики для биолога
21.07.2008, 11:46
alex_kol писал(а):
хотел округлить важное число в своей жизни, но не смог этого сделать.
Если это число такое вожное, зачем его округлять?
А сколько цифр в этом числе? Чем больше цифр, тем меньше губительный эффект округления.
Ну а правило округление в арифметике такое: если последней цифрой является 0,1,2,3 или 4, тогда она отбрасывается, если находится в дробной части и меняется на 0, если дробной части нет. Если же это число заканчивается на 5,6,7,8 или 9, тогда выполняется все тоже самое, только предпоследняя цифра исходного числа увеличивается на 1.
Re: логика математики для биолога
22.07.2008, 07:40
alex_kol писал(а):
Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
Скажите, а давно это ввели? Нас вот в школе учили, что когда 5 на конце, то округляется всегда в большую сторону, вне зависимости от чётности или нечётности предыдущей цифры. То есть вот так:
PaulS писал(а):
Ну а правило округление в арифметике такое: если последней цифрой является 0,1,2,3 или 4, тогда она отбрасывается, если находится в дробной части и меняется на 0, если дробной части нет. Если же это число заканчивается на 5,6,7,8 или 9, тогда выполняется все то же самое, только предпоследняя цифра исходного числа увеличивается на 1.
22.07.2008, 10:12
22.07.2008, 10:53
Brukvalub писал(а):
Во второй ссылке сказано, что стандарт — это округление первым способом (с учётом чётности/нечётности предыдущей цифры). В третьей ссылке говорится, что стандарт — округление вторым способом (всегда в большую сторону, без учёта чётности/нечётности предпоследней цифры). В первой ссылке (статья из Википедии) указаны оба способа округление, причём округление первым способом называется банковским округлением , а округление вторым способом — математическим округлением (и, насколько я понял, считается стандартным во всех областях, не связанных с банковской деятельностью).
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
22.07.2008, 21:42
Профессор Снэйп в сообщении #134686 писал(а):
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
Именно это я и хотел подчеркнуть ссылками:D
22.07.2008, 22:11
Brukvalub писал(а):
Профессор Снэйп в сообщении #134686 писал(а):
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
Именно это я и хотел подчеркнуть ссылками:D
Способ округления может зависеть от решаемой задачи. Например, оценивая сверху погрешность, полученную оценку можно округлять только в большую сторону, то есть, если оценка показывает, что погрешность меньше 0.5001, и Вам приспичило округлить это число до одной значащей цифры, то округлять нужно до 0.6.
Re: логика математики для биолога
23.07.2008, 13:40
Последний раз редактировалось GAA 29.07.2008, 16:23, всего редактировалось 1 раз.
Пусть в системе с основанием выполняется округление числа с разрядами до числа с разрядами; 0$» />; \le x . И пусть числа имеют равные веса. Тогда средняя ошибка округления задается выражением , — прим. GAA) при любой системе счисления с четным основанием . [1] Очевидно (и об этом говорит wiki: “This method is also known as unbiased rounding ”), при использовании банковского округления средняя ошибка равна нулю .
В АЛУ процессоров операции, иногда, выполняются с разрядами, а при сохранении в регистре округляются до разрядов. Кроме того, при сохранении (выгрузке результатов в память) в переменные типа double или single вновь происходит округление (округление не происходит при сохранении в переменную типа extended). Так что описанная модель округления, в принципе, имеет смысл. Как модель, так и банковское правило округления, по-моему, имеет некоторое значение не только в банковских, но и в длительных геодезических расчетах с малым числом разрядов (считали раньше вручную). Возможно поэтому, банковское правило называют в естественных науках Гауссовым правилом округления (на русском см., например, [2]).
alex_kol писал(а):
. вопрос: а чем нечетные цифры лучше четных?
Округление к четному есть договоренность. Очевидно, можно правило изменить и округлять всегда к нечетному числу (это отмечается в [3]). Но так уж договорились.
Refs.
[1] Ильин В.А., Позняк Э.Г. Основы математического анализа. Т.1 — М.: Наука, 1982. Дополнение 2 «Об ошибках в округлении чисел в системе счисления с четным и нечетным основанием» [По-моему, после слов «и мы получим после несложных вычислений, что. » в записи суммы, допущена опечатка , но на результат она не влияет] .
[2] Яворский В.А. Планирование научного эксперимента и обработка экспериментальных данных. Метод. ук. к выполн. лаб. работ — МФТИ, 2006. Раздел 7 «Учет погрешности в записи окончательного результата измерения» [К сожалению текст не особо строгий: при очень беглом прочтении обратил внимание на то, что определения некоторых понятий формулируются без указания того, что такие определения не являются общепринятыми] .
[3] Выгодский М.Я. Справочник по элементарной математике. — М.: Наука, 1979. §35 «Правила округления».
[Добавлено 29.07.08]
В стандарте IEEE-754 имеется четыре режима округления:
1) к ближайшему четному;
2) к нулю;
3) к положительной и отрицательной бесконечности.
Эти режимы поддерживаются, например, сопроцессорами Intel x87 и FPU более поздних процессоров: 486, Pentium.
Из раздела 2.2.3 документа INTEL 80387 PROGRAMMER’S REFERENCE MANUAL, 1987:
Rounding occurs in arithmetic and store operations when the format of the destination cannot exactly represent the infinitely precise true result. For example, a real number may be rounded if it is stored in a shorter real format, or in an integer format. Or, the infinitely precise true result may be rounded when it is returned to a register.
Например, 23,7 округляется до 23, а -23,2 округляется до -24.
Округление в большую сторону
- , округление до (или возьмите потолок, или округление в сторону плюс бесконечности ): y — наименьшее целое число, которое не меньше x . y = ceil (x) = ⌈ x ⌉ = — ⌊ — x ⌋ (x) = \ left \ lceil x \ right \ rceil = — \ left \ lfloor -x \ right \ rfloor>
Например, 23,2 округляется до 24, а −23,7 округляется до −23.
Округление до нуля
- округление до нуля (или обрезать, или округлить от бесконечности ): y — это целое число, наиболее близкое к x , такое, что оно находится между 0 и x (включительно); т.е. y — это целая часть x без его дробных цифр. y = усечь (x) = sgn (x) ⌊ | х | ⌋ = — sign (x) ⌈ — | х | ⌉ (x) = \ operatorname (x) \ left \ lfloor \ left | x \ right | \ right \ rfloor = — \ operatorname (x) \ left \ lceil — \ left | x \ right | \ right \ rceil>
Например, 23,7 округляется до 23, а -23,7 округляется до -23.
Округление от нуля
- округление от нуля (или округление до бесконечности ): y — это целое число, которое ближе всего к 0 (или эквивалентно x ), так что x находится между 0 и y (включительно). y = sign (x) ⌈ | х | ⌉ = — sign (x) ⌊ — | х | ⌋ (x) \ left \ lceil \ left | x \ right | \ right \ rceil = — \ operatorname (x) \ left \ lfloor — \ left | x \ right | \ right \ rfloor>
Например, 23,2 округляется до 24, а -23,2 округляется до -24.
Округление до ближайшего целого числа
Округление числа x до ближайшего целого числа требует некоторого правила разрыва связи для тех случаев, когда x точно на полпути между двумя целыми числами — то есть, когда дробная часть x равна точно 0,5.
Если бы не дробные части 0,5, ошибки округления, вносимые методом округления до ближайшего, были бы симметричными: для каждой дробной части, которая округляется в меньшую сторону (например, 0,268), существует дополнительная дробь. (а именно 0,732), которое округляется на ту же сумму.
При округлении большого набора чисел с фиксированной запятой с равномерно распределенными дробными частями, ошибки округления по всем значениям с пропуском тех, которые имеют 0,5 дробной части, будут статистически компенсировать друг друга. Это означает, что ожидаемое (среднее) значение округленных чисел равно ожидаемому значению исходных чисел, когда мы удаляем из набора числа с дробной частью 0,5.
На практике обычно используются числа с плавающей запятой, которые имеют еще больше вычислительных нюансов, поскольку они неравномерно разнесены.
Округлить половину вверх
Широко используется следующее правило разделения связей, называемое округление половины вверх (или округление половины до положительной бесконечности ). во многих дисциплинах. То есть средние значения x всегда округляются в большую сторону.
Например, 23,5 округляется до 24, а -23,5 округляется до -23.
Однако некоторые языки программирования (такие как Java, Python) определяют здесь свою половину вверх как округлить половину от нуля.
Этот метод требует проверки только одной цифры для определить направление округления в дополнении до двух и подобных представлениях.
Округлить половину вниз
Можно также использовать округлить половину вниз (или округлить половину до отрицательной бесконечности ) вместо более распространенной половины округления вверх.
Например, 23,5 округляется до 23, а -23,5 округляется до -24.
Округлить половину до нуля
Можно также округлить половину до нуля (или округлить половину от бесконечности ) в отличие от обычной округленной половины от нуля.
- Если доля x равна точно 0,5, то y = x — 0,5, если x положительно, и y = x + 0,5, если x равно отрицательный. y = sign (x) ⌈ | х | — 0.5 ⌉ = — sign (x) ⌊ — | х | + 0,5 ⌋ (x) \ left \ lceil \ left | x \ right | -0,5 \ right \ rceil = — \ operatorname (x) \ left \ lfloor — \ left | x \ right | +0,5 \ right \ rfloor>
Например, 23,5 округляется до 23, а -23,5 округляется до -23.
Этот метод обрабатывает положительные и отрицательные значения симметрично и, следовательно, не дает общего положительного / отрицательного смещения, если исходные числа являются положительными или отрицательными с равной вероятностью. Однако он все еще имеет тенденцию к нулю.
Округлить половину от нуля
Другой обычно преподается и используется метод разрыва связей: округлить половину от нуля (или округлить половину до бесконечности ), а именно:
- , если доля x равна точно 0,5, то y = x + 0,5, если x положительна, и y = x — 0,5, если x отрицательно. y = sign (x) ⌊ | х | + 0.5 ⌋ = — sign (x) ⌈ — | х | — 0,5 ⌉ (x) \ left \ lfloor \ left | x \ right | +0,5 \ right \ rfloor = — \ operatorname (x) \ left \ lceil — \ left | x \ right | -0,5 \ right \ rceil>
Например, 23,5 округляется до 24, а -23,5 округляется до -24.
Это может быть более эффективным на двоичных компьютерах, потому что нужно учитывать только первый пропущенный бит, чтобы определить, округляется ли он в большую (1) или в меньшую (0) сторону. Это один из методов, используемых при округлении до значащих цифр из-за его простоты.
Этот метод, также известный как коммерческое округление, обрабатывает положительные и отрицательные значения симметрично и, следовательно, свободен от общего положительного / отрицательного смещения, если исходные числа являются положительными или отрицательными с равной вероятностью. Однако он все еще имеет отклонение от нуля.
Он часто используется для конвертации валют и округления цен (когда сумма сначала конвертируется в наименьшую значимую часть валюты, например центы евро), поскольку это легко объяснить, просто рассмотрев первую дробная цифра, независимо от дополнительных цифр точности или знака суммы (для строгой эквивалентности между плательщиком и получателем суммы).
Округлить половину до четного
Правило разрешения ничьей без положительного / отрицательного смещения и без смещения в сторону / от нуля: округлить половину до четного . Согласно этому соглашению, если дробная часть x равна 0,5, то y является четным целым числом, ближайшим к x . Так, например, +23,5 становится +24, как и +24,5; в то время как -23,5 становится -24, как и -24,5. Эта функция сводит к минимуму ожидаемую ошибку при суммировании округленных цифр, даже если входные данные в основном положительные или в основном отрицательные.
Этот вариант метода округления до ближайшего также называется конвергентным округлением, статистическим округлением, голландским округлением, гауссовым округление, нечетно-четное округление или банковское округление .
Это режим округления по умолчанию, используемый в IEEE 754 операциях с плавающей запятой (см. также Ближайшая целочисленная функция ) и более сложный режим, используемый при округлении до значащих цифр.
За счет устранения систематической ошибки повторное округленное сложение или вычитание независимых чисел даст результат с ошибкой, которая имеет тенденцию увеличиваться пропорционально квадратному корню из числа операций, а не линейно. Подробнее см. случайное блуждание.
Однако это правило искажает распределение, увеличивая вероятность равных по сравнению с шансами. Обычно это менее важно, чем смещения, которые устраняются этим методом.
Округлить половину до нечетного
Аналогичное правило разрешения ничьей: округлить половину до нечетного . В этом подходе, если доля x равна 0,5, тогда y является нечетным целым числом, ближайшим к x . Так, например, +23,5 становится +23, как и +22,5; в то время как -23,5 становится -23, как и -22,5.
Этот метод также свободен от положительного / отрицательного смещения и смещения в сторону / от нуля.
Этот вариант почти никогда не используется в вычислениях, за исключением ситуаций, когда нужно избежать увеличения масштаба чисел с плавающей запятой, которые имеют ограниченный диапазон экспоненты. Если округлить половину до четного, небесконечное число будет округляться до бесконечности, а небольшое денормальное значение будет округлено до нормального ненулевого значения. Фактически, этот режим предпочитает сохранять существующую шкалу связанных чисел, избегая результатов, выходящих за пределы допустимого диапазона, когда это возможно для систем счисления с четным основанием (например, двоичной и десятичной).
Случайное округление в целое число
Чередование разрыва связей
Один метод, более неясный, чем большинство других, заключается в изменении направления при округлении числа до 0,5 дробной части. Все остальные округляются до ближайшего целого числа.
- Когда дробная часть равна 0,5, попеременное округление в большую или меньшую сторону: при первом появлении дробной части 0,5 округление в большую сторону; для второго случая округлить в меньшую сторону; и так далее. (В качестве альтернативы, округление первой дробной части 0,5 может быть определено с помощью случайного начального числа.)
. Если повторений дробной части 0,5 происходит значительно чаще, чем перезапуск вхождения «подсчета», то это эффективно без смещения. С гарантированным нулем смещение, это полезно, если числа должны быть суммированы или усреднены.
Случайное разделение связей
- Если дробная часть x равна 0,5, выберите y случайным образом из x + 0,5 и x — 0,5, с равной вероятностью. Все остальные округляются до ближайшего целого числа.
Подобно округлению от половины до четного и с округлением до От половины к нечетности, это правило практически лишено общей систематической ошибки; но оно также справедливо для четных и нечетных значений y . Преимущество перед альтернативным разделением связей состоит в том, что последнее направление округления на 0,5 дробного часть не нужно «запоминать».
Стохастическое округление
Округление до одного из ближайших двух целых чисел с вероятностью, зависящей от близости, называется стохастическое округление и даст в среднем несмещенный результат.
Например, 1,6 будет округлено до 1 с вероятностью 0,4 и до 2 с вероятностью 0,6.
Стохастическое округление является точным, чего никогда не может быть функция округления . Например, предположим, что вы начали с 0 и добавили к нему 0,3 сто раз, округляя промежуточную сумму между каждым добавлением. Результатом будет 0 при обычном округлении, но при стохастическом округлении ожидаемый результат будет 30, что является таким же значением, полученным без округления. Это может быть полезно в машинном обучении, где при обучении может использоваться итеративная арифметика с низкой точностью. Стохастическое округление — это способ достижения одномерного дизеринга.
Сравнение подходов для округления до целого числа
Значение | Функциональные методы | Рандомизированные методы (среднее значение 99 округлений) | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Направленное округление | Округление до ближайшего | Переменный тай-брейк | Случайный тай-брейк | Стохастик | ||||||||||||
Раунд. вниз. (в сторону — ∞) | Раунд. up. ( в сторону + ∞) | Округлить. до. нуля | Округлить. от. нуля | Округлить. наполовину вниз. (в сторону — ∞) | Округлить. до половины. (в сторону + ∞) | Округлить половину. до. нуля | Округлить половину. от. нуля | Округлить. половину. до четного | Округлить. половину. до нечетного | μ | σозначает, что | μ | σозначает, | μ | σозначает | |
+1,8 | +1 | +2 | +1 | +2 | +2 | +2 | +2 | +2 | +2 | +2 | +2 | 0 | +2 | 0 | +1,8 | 0,04 |
+1,5 | +1 | +1 | +1 | +1,505 | 0 | +1,5 | 0,05 | +1,5 | 0,05 | |||||||
+1,2 | +1 | +1 | +1 | +1 | 0 | +1 | 0 | +1.2 | 0,04 | |||||||
+0,8 | 0 | +1 | 0 | +1 | +0,8 | 0,04 | ||||||||||
+0,5 | 0 | 0 | 0 | +0,505 | 0 | +0,5 | 0,05 | +0,5 | 0,05 | |||||||
+0,2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +0,2 | 0,04 | |||||||
-0,2 | -1 | 0 | -1 | -0,2 | 0,04 | |||||||||||
-0,5 | -1 | -1 | -1 | -0,495 | 0 | -0,5 | 0,05 | -0,5 | 0,05 | |||||||
-0,8 | -1 | -1 | −1 | −1 | 0 | −1 | 0 | −0,8 | 0,04 | |||||||
−1,2 | −2 | — 1 | -1 | -2 | -1,2 | 0,04 | ||||||||||
-1,5 | -2 | −2 | −2 | −1,495 | 0 | −1,5 | 0,05 | −1,5 | 0,05 | |||||||
— 1,8 | −2 | −2 | −2 | −2 | 0 | −2 | 0 | −1,8 | 0,04 |
Округление до других значений
Округление до указанного кратного
Наиболее распространенным типом округления является округление до целого числа; или, в более общем смысле, до целого числа, кратного некоторому приращению — например, округление до целых десятых долей секунды, сотых долей доллара, до целых кратных 1/2 или 1/8 дюйма, до целых десятков или тысяч и т. д.
Как правило, округление числа x до кратного некоторого указанного положительного значения m влечет за собой следующие шаги:
round T o M ultiple (x, m) = round (x / m) × m (x, m) = \ mathrm (x / m) \ times m>
Например, округление x = 2,1784 доллара к целым центам (т. Е. Кратно 0,01) влечет за собой вычисление 2,1784 / 0,01 = 217,84, затем округление до 218 и, наконец, вычисление 218 × 0,01 = 2,18.
При округлении до заранее определенного количества значащих цифр приращение m зависит от величины округляемого числа (или округляемого результата).
Приращение m обычно является конечной дробью в любой системе счисления, используемой для представления чисел. Для отображения людям это обычно означает десятичную систему счисления (то есть m является целым числом, умноженным на степень 10, например 1/1000 или 25 / 100). Для промежуточных значений, хранящихся в цифровых компьютерах, это часто означает, что двоичная система счисления ( m представляет собой целое число, умноженное на степень 2).
Абстрактная функция «round ()» с одним аргументом, которая возвращает целое число из произвольного действительного значения, имеет как минимум дюжину различных конкретных определений, представленных в разделе округление до целого числа. Абстрактная функция с двумя аргументами «roundToMultiple ()» формально определена здесь, но во многих случаях она используется с неявным значением m = 1 для приращения, а затем сводится к эквивалентной абстрактной функции с одним аргументом, с той же дюжиной различных конкретных определений.
Логарифмическое округление
Округление до указанной степени
Округление до указанной степени сильно отличается от округления до указанного кратного; например, при вычислениях обычно требуется округлять число до целой степени 2. Обычно шаги для округления положительного числа x до степени некоторого указанного целого числа b больше 1:
round T o P ower (x, b) = bround (log b x) (x, b) = b ^ (\ log _ x)>>
Многие предостережения, применимые к округлению до кратного, применимы и к округлению до степени.
Масштабированное округление
Этот тип округления, который также называется округлением до логарифмического масштаба, представляет собой вариант округления до указанной степени. Округление по логарифмической шкале осуществляется путем принятия логарифма суммы и выполнения обычного округления до ближайшего значения в логарифмической шкале.
Например, резисторы снабжены предпочтительными числами в логарифмической шкале. В частности, для резисторов с точностью 10% они поставляются с номиналами 100, 120, 150, 180, 220 и т.д., округленными до кратных 10 (серия E12 ). Если расчет показывает, что требуется резистор на 165 Ом, то log (150) = 2,176, log (165) = 2,217 и log (180) = 2,255. Логарифм 165 ближе к логарифму 180, поэтому резистор на 180 Ом был бы первым выбором, если нет других соображений.
Округление значения x ∈ (a, b) до a или b зависит от того, больше или меньше значение x в квадрате произведения ab. Значение 165 округляется до 180 в примере резисторов, потому что 165 = 27225 больше, чем 150 × 180 = 27000.
Округление с плавающей запятой
В арифметике с плавающей запятой округление направлено на то, чтобы превратить заданное значение x в значение y с указанным количеством значащих цифр. Другими словами, y должно быть кратным числу m , которое зависит от величины x . Число m является степенью основания (обычно 2 или 10) представления с плавающей запятой.
Помимо этой детали, все варианты округления, описанные выше, применимы также к округлению чисел с плавающей запятой. Алгоритм такого округления представлен в разделе Масштабированное округление выше, но с постоянным коэффициентом масштабирования s = 1 и целым основанием b >1.
Если округленный результат переполняет результат для направленного округления, это либо соответствующая бесконечность со знаком при «округлении от нуля», либо наивысшее представимое положительное конечное число (или наименьшее представимое отрицательное конечное число, если x отрицательно) при «округлении в сторону нуля». Результатом переполнения для обычного случая округления до ближайшего всегда является подходящая бесконечность.
Округление до простой дроби
В некоторых контекстах желательно округлить заданное число x до «чистой» дроби, то есть ближайшей дроби y = m / n , числитель m и знаменатель n не превышают заданный максимум. Эта проблема в значительной степени отличается от проблемы округления значения до фиксированного числа десятичных или двоичных цифр или до кратного данной единице m . Эта проблема связана с последовательностями Фарея, деревом Стерна – Броко и непрерывными дробями.
округлением до доступного значения
Завершено пиломатериалы, писчая бумага, конденсаторы и многие другие товары обычно продаются только в нескольких стандартных размерах.
Многие процедуры проектирования описывают, как вычислить приблизительное значение, а затем «округлить» до некоторого стандартного размера с помощью таких фраз, как «округлить до ближайшего стандартного значения», «округлить до ближайшего стандартного значения» или « округлить до ближайшего стандартного значения ».
Когда набор предпочтительных значений равномерно распределен по логарифмической шкале, выбор ближайшего предпочтительного значения к любому заданному значению может быть рассматривается как форма масштабированного округления. Такие округленные значения можно вычислить напрямую.
Округление в других контекстах
Сглаживание и распространение ошибок
При оцифровке непрерывных сигналов, таких как звуковые волны, общий эффект от ряда измерений более важен, чем точность каждого отдельного измерения. В этих обстоятельствах обычно используются дизеринг и связанный с ним метод, диффузия ошибок. Связанный с этим метод, называемый широтно-импульсной модуляцией, используется для получения выходного сигнала аналогового типа от инерциального устройства путем быстрой подачи импульсов мощности с переменной скважностью.
Распространение ошибок пытается минимизировать в среднем ошибку. При плавном наклоне от единицы до нуля выход будет равен нулю для первых нескольких членов, пока сумма ошибки и текущего значения не станет больше 0,5, и в этом случае выводится 1, а разница вычитается из ошибки. уже. Смешение Флойда – Стейнберга — это популярная процедура распространения ошибок при оцифровке изображений.
В качестве одномерного примера предположим, что числа 0,9677, 0,9204, 0,7451 и 0,3091 встречаются по порядку, и каждое из них следует округлить до кратного 0,01. В этом случае кумулятивные суммы 0,9677, 1,8881 = 0,9677 + 0,9204, 2,6332 = 0,9677 + 0,9204 + 0,7451 и 2,9423 = 0,9677 + 0,9204 + 0,7451 + 0,3091 округляются до кратного 0,01: 0,97, 1,89, 2,63 и 2.94. Первое из них и разница соседних значений дают желаемые округленные значения: 0,97, 0,92 = 1,89 — 0,97, 0,74 = 2,63 — 1,89 и 0,31 = 2,94 — 2,63.
Арифметика Монте-Карло
Арифметика Монте-Карло — это метод в методах Монте-Карло, где округление производится случайным образом в большую или меньшую сторону. Стохастическое округление может использоваться для арифметики Монте-Карло, но в целом чаще используется просто округление в большую или меньшую сторону с равной вероятностью. Повторные прогоны дадут случайное распределение результатов, которое может указать на стабильность вычислений.
Точное вычисление с округленной арифметикой
Можно использовать округленную арифметику для оценки точного значения функции с целочисленным доменом и диапазоном. Например, если мы знаем, что целое число n представляет собой полный квадрат, мы можем вычислить его квадратный корень, преобразовав n в значение с плавающей запятой z , вычисление приблизительного квадратного корня x из z с плавающей запятой, а затем округление x до ближайшего целого числа y . Если n не слишком велико, ошибка округления с плавающей запятой в x будет меньше 0,5, поэтому округленное значение y будет точным квадратный корень из n . По сути, поэтому правила скольжения могут использоваться для точной арифметики.
Двойное округление
Округление числа дважды подряд до разных уровней точности, при этом последняя точность является более грубой, не гарантирует того же результата, что и однократное округление до конечной точности, за исключением случай направленного округления. Например, округление 9,46 до одного десятичного числа дает 9,5, а затем 10 при округлении до целого числа с использованием округления половины до четного, но даст 9 при непосредственном округлении до целого числа. Борман и Чатфилд обсуждают последствия двойного округления при сравнении данных, округленных до одного десятичного знака, с пределами спецификации, выраженными с помощью целых чисел.
В судебных процессах по делу Мартинес против Олстейт и Сендехо против фермеров, которые велись между 1995 и 1997 годами, страховые компании утверждали, что двойное округление премий допустимо и фактически необходимо. Суды США вынесли решение против страховых компаний и приказали им принять правила, обеспечивающие единое округление.
Некоторые компьютерные языки и стандарт IEEE 754-2008 требуют, чтобы результаты прямых вычислений не были округлить дважды. Это было особой проблемой для Java, поскольку она разработана для идентичной работы на разных машинах, и для достижения этого с x87 с плавающей запятой пришлось использовать специальные приемы программирования. Язык Java был изменен, чтобы допускать разные результаты, где разница не имеет значения, и требовал использования квалификатора strictfp, когда результаты должны точно соответствовать.
В некоторых алгоритмах промежуточный результат вычисляется с большей точностью, а затем должен быть округлен до конечной точности. Двойного округления можно избежать, выбрав соответствующее округление для промежуточных вычислений. Это состоит в том, чтобы избегать округления до средних точек для окончательного округления (кроме случаев, когда средняя точка точна). В двоичной арифметике идея состоит в том, чтобы округлить результат до нуля и установить младший бит в 1, если округленный результат неточен; это округление называется липким округлением. Эквивалентно, он заключается в возврате промежуточного результата, когда он точно представим, и ближайшего числа с плавающей запятой с нечетным значением в противном случае; поэтому его также называют округлением до нечетного.
Дилемма изготовителя стола
Уильям М. Кахан ввел термин «Дилемма изготовителя стола» из-за неизвестной стоимости округления трансцендентные функции :
«Никто не знает, сколько будет стоить вычисление y с правильным округлением для каждых двух аргументов с плавающей запятой, при которых не происходит переполнения / потери значимости. Вместо этого авторитетные математические библиотеки вычисляют элементарно трансцендентные функции в основном в пределах чуть более половины ulp и почти всегда в пределах одного ulp. Почему y нельзя округлить до половины ulp, как SQRT? Потому что никто знает, сколько вычислений это будет стоить. Не существует общего способа предсказать, сколько дополнительных цифр потребуется перенести, чтобы вычислить трансцендентное выражение и правильно округлить его до некоторого заранее заданного числа цифр. Даже тот факт (если это правда), что конечного числа дополнительных цифр в конечном итоге будет достаточно, может быть, это глубокая теорема ».
Стандарт IEEE 754 с плавающей запятой rd гарантирует, что сложение, вычитание, умножение, деление, объединенное умножение – сложение, квадратный корень и остаток с плавающей запятой дадут правильно округленный результат операции с бесконечной точностью. В стандарте 1985 г. такой гарантии не было для более сложных функций, и они, как правило, в лучшем случае имеют точность только до последнего бита. Однако стандарт 2008 гарантирует, что соответствующие реализации дадут правильно округленные результаты с учетом активного режима округления; однако реализация функций не является обязательной.
Используя теорему Гельфонда – Шнайдера и теорему Линдеманна – Вейерштрасса, можно доказать, что многие стандартные элементарные функции возвращают трансцендентные результаты, если заданы рациональные ненулевые аргументы; поэтому всегда можно правильно округлить такие функции. Однако определение предела для заданной точности того, насколько точные результаты должны быть вычислены, прежде чем правильно округленный результат сможет быть гарантированным, может потребовать много вычислительного времени или может оказаться вне досягаемости. На практике, когда этот предел неизвестен или слишком велик, необходимо принять какое-то решение в реализации (см. Ниже), но в соответствии с вероятностной моделью правильное округление может выполняться с очень высокой вероятностью.
Некоторые программные пакеты предлагают правильное округление. Пакет GNU MPFR дает правильно округленные результаты произвольной точности. Некоторые другие библиотеки реализуют элементарные функции с правильным округлением с двойной точностью:
- IBM libultim с округлением только до ближайшего. Эта библиотека использует до 768 бит рабочей точности.
- Sun Microsystems libmcr в 4 режимах округления. Для сложных случаев эта библиотека также использует множественную точность, и количество слов увеличивается на 2 каждый раз, когда возникает дилемма создателя таблиц (с неопределенным поведением в очень маловероятном случае, когда достигается некоторый предел машины).
- CRlibm, написанный в старой команде Arénaire (LIP, ENS Lyon ). Он поддерживает 4 режима округления и доказан.
Существуют вычислимые числа, для которых округленное значение никогда не может быть определено, независимо от того, сколько цифр вычислено. Конкретные примеры не могут быть приведены, но это следует из неразрешимости проблемы остановки. Например, если гипотеза Гольдбаха верна, но недоказуема, то результат округления следующего значения до следующего целого числа не может быть определен: 1 + 10, где n — первое четное число больше 4, которое не является суммой двух простых чисел, или 1, если такого числа нет. Округленный результат равен 2, если такое число n существует, и 1 в противном случае. Однако значение до округления может быть приближено с любой заданной точностью, даже если предположение недоказуемо.
Взаимодействие со строковым поиском
Округление может отрицательно повлиять на строковый поиск числа. Например, π, округленное до четырех цифр, будет «3,1416», но простой поиск этой строки не обнаружит «3,14159» или любое другое значение π, округленное до более чем четырех цифр. Напротив, усечение не страдает этой проблемой; например, простой строковый поиск «3,1415», который усечен до четырех цифр, обнаружит значения π, усеченные до более чем четырех цифр.
История
Концепция округления очень старая, возможно, даже старше, чем концепция деления. Некоторые древние глиняные таблички, найденные в Месопотамии, содержат таблицы с округленными значениями обратных и квадратными корнями по основанию 60. Округленные приближения к π, длина года и длина месяца также являются древними — см. примеры с основанием 60.
Метод округления до четности служил стандартом ASTM (E-29) с 1940 года. Происхождение терминов «беспристрастное округление» и «статистическое округление» не требует пояснений. В четвертом издании «Вероятности и теории ошибок» 1906 года Роберт Симпсон Вудворд назвал это «компьютерным правилом», указывая на то, что в то время оно широко использовалось человеческими компьютерами, которые вычисляли математические таблицы. Черчилль Эйзенхарт указал, что эта практика уже была «прочно обоснована» в анализе данных к 1940-м годам.
Происхождение термина «округление банкиров» остается более неясным. Если этот метод округления когда-либо был стандартом в банковской сфере, доказательства оказалось чрезвычайно трудно найти. Напротив, в разделе 2 отчета Европейской комиссии «Введение евро и округление валютных сумм» предполагается, что ранее не существовало стандартного подхода к округлению в банковской сфере; и в нем указано, что «промежуточные» суммы должны округляться в большую сторону.
До 1980-х годов метод округления, используемый в компьютерной арифметике с плавающей запятой, обычно фиксировался аппаратными средствами, плохо документирован, непоследователен и различен для каждой марки и модели компьютера. Эта ситуация изменилась после того, как стандарт IEEE 754 с плавающей запятой был принят большинством производителей компьютеров. Стандарт позволяет пользователю выбирать один из нескольких режимов округления и в каждом случае точно определяет, как следует округлять результаты. Эти функции сделали численные вычисления более предсказуемыми и машинно-независимыми, а также сделали возможной эффективную и последовательную реализацию интервальной арифметики.
В настоящее время многие исследования имеют тенденцию округлять до кратных 5 или 2. Например, Jörg Батен использовал возрастную кучу во многих исследованиях для оценки уровня математической грамотности древнего населения. Он придумал индекс ABCC, который позволяет сравнивать навыки счета среди регионов, возможных без каких-либо исторических источников, где измерялась грамотность населения.
Функции округления в языках программирования
Большинство языков программирования предоставляют функции или специальный синтаксис для округления дробных чисел различными способами. Самые ранние числовые языки, такие как FORTRAN и C, обеспечивали только один метод, обычно усечение (до нуля). Этот метод по умолчанию может подразумеваться в определенных контекстах, например, при присвоении дробного числа переменной целое или использовании дробного числа в качестве индекса массива . Остальные виды округления нужно было запрограммировать явно; например, округление положительного числа до ближайшего целого числа может быть реализовано путем добавления 0,5 и усечения.
Однако в последние десятилетия синтаксис и / или стандартные библиотеки большинства языков обычно предоставляют по крайней мере четыре основные функции округления (вверх, вниз, до ближайшего и в сторону нуль). Метод разрешения конфликтов может варьироваться в зависимости от языка и версии и / или может выбираться программистом. Несколько языков следуют примеру стандарта IEEE 754 с плавающей запятой и определяют эти функции как принимающие аргумент с плавающей запятой двойной точности и возвращающие результат того же типа, который затем при необходимости может быть преобразован в целое число.. Такой подход позволяет избежать ложного переполнения, поскольку типы с плавающей запятой имеют больший диапазон, чем целочисленные типы. Некоторые языки, такие как PHP, предоставляют функции, округляющие значение до указанного числа десятичных цифр, например от 4321,5678 до 4321,57 или 4300. Кроме того, многие языки предоставляют функцию printf или аналогичную функцию форматирования строки, которая позволяет преобразовывать дробное число в строку, округленную до указанного пользователем количества десятичных знаков ( точность). С другой стороны, усечение (округление до нуля) по-прежнему является методом округления по умолчанию, используемым во многих языках, особенно для деления двух целых значений.
Напротив, CSS и SVG не определяют какой-либо конкретной максимальной точности для чисел и измерений, которые обрабатываются и отображаются в их DOM и в их интерфейсе IDL как строки, как если бы они имели бесконечную точность, и не делали различий между целыми числами и значениями с плавающей запятой; однако реализации этих языков обычно преобразуют эти числа в значения с плавающей запятой двойной точности IEEE 754 перед отображением вычисленных цифр с ограниченной точностью (особенно в рамках стандартного JavaScript или ECMAScript привязки интерфейса).
Другие стандарты округления
Некоторые дисциплины или учреждения выпустили стандарты или директивы для округления.
Наблюдения за погодой в США
В руководстве, выпущенном в середине 1966 года, Управление федерального координатора по метеорологии США определило, что данные о погоде следует округлять до ближайшего округления. число, с правилом «округлить половину вверх». Например, 1,5, округленное до целого числа, должно стать 2, а -1,5 должно стать -1. До этой даты правилом разделения ставок было «округлить половину от нуля».
Отрицательный ноль в метеорологии
Некоторые метеорологи могут писать «-0» для обозначения температуры от 0,0 до -0,5 градусов (исключая), которая была округлена до целого числа. Это обозначение используется, когда отрицательный знак считается важным, независимо от того, насколько мала величина; например, при округлении температур по шкале Цельсия, где минус 0 означает замерзание.
См. также
- таблицы точности Гала
- Арифметика интервалов
- ISO 80000-1
- Алгоритм суммирования Кахана
- Ближайшая целочисленная функция
- Усечение
- Знаковое представление
- Пропорциональное представление партийного списка — это приложение округления до целых чисел, которое было тщательно исследовано
- Округление денежных средств, в связи с отсутствием очень дешевых монет
Примечания
Ссылки
Внешние ссылки
- Вайсштейн, Эрик У.«Округление». MathWorld.
- Введение в различные алгоритмы округления, доступное для широкой аудитории, но особенно полезное для тех, кто изучает информатику и электронику.
- Как реализовать пользовательские процедуры округления от Microsoft (сломано)
MS SQL Округление к ближайшему чётному
Есть у меня логика в приложении на c#, которую я был вынужден начать дублировать на slq server в представлениях и хранимках и столкнулся с тем, что расчёт происходит различным образом. Наглядный пример. Некоторая сущность с полем типа decimal, Code First, табличка на SQL Server, тип тоже decimal. В C# Math.Round в случае числа с половинкой округляет данные к ближайшему чётному числу (MidpointRounding.ToEven):
decimal val1 = 766.5m; decimal val2 = 767.5m; Console.WriteLine(Math.Round(766.5m)); // 766 Console.WriteLine(Math.Round(767.5m)); // 768
При этом ROUND в SQL таких настроек не поддерживает:
DECLARE @val1 decimal = 766.5; DECLARE @val2 decimal = 767.5; SELECT ROUND(@val1, 0); -- 767 SELECT ROUND(@val2, 0); -- 768
Каким образом сделать поведение ROUND в MS SQL таким же, как в c#? PS Версия сервера: MSSQL2016 (13.0.1601.5), .net core 2.1
Отслеживать
задан 8 ноя 2019 в 22:25
28.6k 19 19 золотых знаков 59 59 серебряных знаков 139 139 бронзовых знаков
SQL CLR — не вариант: сервер не мой, а хостера — поэтому доступ весьма урезанный.
8 ноя 2019 в 22:37
8 ноя 2019 в 22:41
Ну и вот, для произвольного количества знаков после запятой: stackoverflow.com/a/22355763/10235013
8 ноя 2019 в 22:47
Тут по моему наиболее точно отвечено: stackoverflow.com/questions/41592666/…
8 ноя 2019 в 23:30
скалярная функция не вариант?
9 ноя 2019 в 9:22
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если я правильно понял задачу, то можно так:
DECLARE @T TABLE (col decimal(18,2)) INSERT @T (col) VALUES (-122), (-122.5), (-123), (-123.5), (-124), (-124.5), (122), (122.5), (123), (123.5), (124), (124.5) SELECT col ,IIF(CEILING(col) % 2 = 0, CEILING(col), FLOOR(col)) FROM @T
Функция CEILING — возвращает наименьшее целое число, большее или равное переданному в неё числовому выражению;
Функция FLOOR — возвращает наибольшее целое число, меньшее или равное переданному в неё числовому выражению.
В выражении CEILING(col) % 2 = 0 мы проверяем число с откинутой дробной частью на чётность (остаток от деления на 2 должен быть равен нулю). Если число чётное, то берём наименьшее целое, в противном случае наибольшее целое.
Конструкцию IIF так же можно заменить на CASE для версий SQL меньше 2012, которые не поддерживают IIF:
CASE CEILING(col) % 2 WHEN 0 THEN CEILING(col) ELSE FLOOR(col) END
P.S. Запихивать эту конструкцию в функцию я бы не стал. Вообще в SQL Server от функций лучше держаться подальше без крайней нужды, так как они могут представлять собой подводные камни в плане производительности запросов.