Главная страница
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.042 c
15-1173742536
Ш-К
2007-03-13 02:35
2007.04.08
Как работать с данными на CD?


2-1174048675
valua
2007-03-16 15:37
2007.04.08
БД и Word


3-1168425856
Dmitriy_info
2007-01-10 13:44
2007.04.08
Как из Delphi программно создать связь между двумя базами Access?


10-1130924111
Explorer
2005-11-02 12:35
2007.04.08
Обработка *.xls файлов


8-1154603965
AbrosimovA
2006-08-03 15:19
2007.04.08
Кто-нибудь откроет секрет PowerDVD