- Регистрация
- 1 Мар 2015
- Сообщения
- 1,467
- Баллы
- 155
Метод округления
Округление — очень широко используемый метод приближенного расчета, который бывает двух видов: метод арифметического округления и метод банковского округления.
Так называемый метод арифметического округления — это метод округления в обычном для нас понимании. Правило таково: когда значение округленной цифры больше или равно 5, цифра округляется и цифра увеличивается на единицу; когда значение округляемой цифры меньше 5, цифра округляется напрямую. .
Так называемый банковский метод округления — это, по сути, метод округления до пяти с оставлением двойных значений (также известный как округление до пяти нечетных-четных). Правило таково: когда значение округленной цифры меньше 5, цифра сразу отбрасывается; когда значение округленной цифры больше или равно 6, цифра округляется и вперед на одну цифру; значение округленного разряда округляется При равенстве 5, если значение предыдущего разряда нечетное, разряд округляется и предыдущее разряд увеличивается на единицу, если значение предшествующего разряда четное, то цифра сразу отбрасывается.
Подводя итог, можно сказать, что результаты, полученные двумя методами округления, несовместимы, поэтому их необходимо различать в соответствии с фактическими потребностями при их использовании. В противном случае будут какие-то необъяснимые отклонения.
Во-вторых, функция округления в Delphi.
Как мы все знаем, в Delphi есть функция округления Round. Но он реализует операцию округления по правилам банковского метода округления, а в Delphi нет функции округления, реализующей операцию округления по арифметическому методу округления. Для этого я написал функцию округления RoundEx, основанную на арифметическом методе округления, как дополнение к Delphi. Конкретная реализация выглядит следующим образом:
Округление — очень широко используемый метод приближенного расчета, который бывает двух видов: метод арифметического округления и метод банковского округления.
Так называемый метод арифметического округления — это метод округления в обычном для нас понимании. Правило таково: когда значение округленной цифры больше или равно 5, цифра округляется и цифра увеличивается на единицу; когда значение округляемой цифры меньше 5, цифра округляется напрямую. .
Так называемый банковский метод округления — это, по сути, метод округления до пяти с оставлением двойных значений (также известный как округление до пяти нечетных-четных). Правило таково: когда значение округленной цифры меньше 5, цифра сразу отбрасывается; когда значение округленной цифры больше или равно 6, цифра округляется и вперед на одну цифру; значение округленного разряда округляется При равенстве 5, если значение предыдущего разряда нечетное, разряд округляется и предыдущее разряд увеличивается на единицу, если значение предшествующего разряда четное, то цифра сразу отбрасывается.
Подводя итог, можно сказать, что результаты, полученные двумя методами округления, несовместимы, поэтому их необходимо различать в соответствии с фактическими потребностями при их использовании. В противном случае будут какие-то необъяснимые отклонения.
Во-вторых, функция округления в Delphi.
Как мы все знаем, в Delphi есть функция округления Round. Но он реализует операцию округления по правилам банковского метода округления, а в Delphi нет функции округления, реализующей операцию округления по арифметическому методу округления. Для этого я написал функцию округления RoundEx, основанную на арифметическом методе округления, как дополнение к Delphi. Конкретная реализация выглядит следующим образом:
Код:
function RoundClassic(R: Real): Int64;
begin
Result:= Trunc(R);
if Frac(R) >= 0.5 then
Result:= Result + 1;
end;