Форум: "Основная";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизМатематическое округление чисел и другое Найти похожие ветки
← →
Влад (2007-02-14 16:09) [0]Необходим аналог функции RoundTo (округление в любом порядке), но правильно работающая. Стандартная функция округляет к четным числам.
Была написана следующая функция:
function MyRoundTo(D: Extended; Prec: Integer): Extended;
var
V, K: Extended;
begin
K := IntPower(10, Prec);
V := Trunc( Abs(D) * K + 0.5 );
Result := V / K * Sign(D);
end;
эта функция в основном свою задачу решает, но в редких случаях даёт неверный результат, например:
X= 0,9954
MyRoundTo(X, 2) = 0,99
а ожидалась 1.
В таком виде функция работает правильно:
function MyRoundTo(D: Extended; Prec: Integer): Extended;
var
V, K: Extended;
begin
K := IntPower(10, Prec);
V := Trunc( StrToFloat( FloatToStr( Abs(D) * K + 0.5)) );
Result := V / K * Sign(D);
end;
как получить тот-же эффект, но без "StrToFloat( FloatToStr(" ?
← →
Johnmen © (2007-02-14 16:19) [1]RoundTo работает абсолютно правильно, правила описаны в F1
← →
Сергей М. © (2007-02-14 16:19) [2]SetRoundMode() yf nj ceotcndetn
← →
Влад (2007-02-14 16:40) [3]Как я уже и писал ф-я Round и RoundTo округляют к чётным числам, т.е.
Round(0.5)=0
Round(1.5)=2
Round(2.5)=2
Round(3.5)=4
и т.д.
В F1 этот метод обозвали "банкирским", но это не то чему нас учили на уроках математики ;)
А другие режимы кроме rmNearest в функции SetRoundMode вообще не приводят к округлению.
← →
Сергей М. © (2007-02-14 16:47) [4]
> другие режимы кроме rmNearest в функции SetRoundMode вообще
> не приводят к округлению
ну конечно)
FLDCW придумана Intel"ом просто так, для забавы
← →
Влад (2007-02-14 17:07) [5]
> ну конечно) FLDCW придумана Intel"ом просто так, для забавы
повторите для схватывающих на лету....
как будет выглядеть округление по правилам матиматики?
← →
AndreyV © (2007-02-15 01:09) [6]Почитай здесь
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1217
← →
Влад (2007-02-15 22:48) [7]Спасибо, интересовала именно эта информация.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c