Прошу объяснить матекатику 1,8-1=0,800004
Добавлено: 19.03.2015 03:07:04
Натыкался на проблему с округлением ранее, и все решалось добавлением "SetRoundMode(rmUP);", но тут.
Я не понимаю.
Алгоритм работает отдельно, если ему передать руками число и округлить, но если в составе прохода расчетов требуется округлить число, то вечно в окончании 0,00000000004.
Подумал что замудрил с типами, но тогда число сконвертированное в строку и обратно должно было исключить такую проблему, а тут стабильность.
Может кто то натыкался, а то особо нет времени ставить среду с fpc 3.1 и любоваться теми же ошибками.
Я не понимаю.
Алгоритм работает отдельно, если ему передать руками число и округлить, но если в составе прохода расчетов требуется округлить число, то вечно в окончании 0,00000000004.
Подумал что замудрил с типами, но тогда число сконвертированное в строку и обратно должно было исключить такую проблему, а тут стабильность.
Может кто то натыкался, а то особо нет времени ставить среду с fpc 3.1 и любоваться теми же ошибками.
- Код: Выделить всё
// Входит значение 0,79545153321
function GetRoundValueTo2(X:Double):Double;
begin
try
Math.SetRoundMode(rmUP);
if not((x>-1)and(x<1)) then
begin
x:=SimpleRoundTo(x,-2);
result:=x;
end
else begin
x:=x+1; //получаем 1,79545153321
x:=SimpleRoundTo(x,-2); //получаем 1,8
x:=x-1; //получаем 0,8000000004
result:=x;
end;
except
result:=x;
end;
end;