Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Математическое округление чисел и другое   Найти похожие ветки 

 
Влад   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1171268118
Glushenko
2007-02-12 11:15
2007.04.08
Передача параметров между формами


2-1174461088
Abcdef123
2007-03-21 10:11
2007.04.08
Как правильно выбрать свойство TForm.Position?


3-1169220082
Death
2007-01-19 18:21
2007.04.08
Проблема с использованием TDBLookupComboBox


4-1163740315
pirate
2006-11-17 08:11
2007.04.08
использование CyptoAPI


2-1174455382
User_OKA
2007-03-21 08:36
2007.04.08
Алгоритм