Вниз
Скачать: CL | DM;

Round на разных компах возвращает разные значения   Найти похожие ветки 

← →
MakNik ©   (2004-04-30 12:36) [0]

Ф-ция Round(X*100)*0.01 на разных компах возвращает разные значения. При Х=25.185 на одной возвращает 25.19, на другой возвращает 25.18.
Подскажите, плз., как с этим бороться!?


← →
Романов Р.В. ©   (2004-04-30 12:43) [1]

не помню есть ли в D5 функция SetRoundMode


← →
MakNik ©   (2004-04-30 12:48) [2]


> Романов Р.В. ©   (30.04.04 12:43) [1]
> не помню есть ли в D5 функция SetRoundMode

... похоже что нет


← →
Григорьев Антон   (2004-04-30 12:49) [3]

В D5 точно нет.


← →
Романов Р.В. ©   (2004-04-30 12:50) [4]

SetRoundMode function

Sets the FPU rounding mode.

Unit

Math

Category

FPU control

type TFPURoundingMode = (rmNearest, rmDown, rmUp, rmTruncate);
function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;

Description

Call SetRoundingMode to specify how the FPU handles rounding issues. The rounding mode can be any of the following values:

Value Meaning

rmNearest Rounds to the closest value.
rmDown Rounds toward negative infinity.
rmUp Rounds toward positive infinity.
rmTruncate Truncates the value, rounding positive numbers down and negative numbers up.

type
 TFPURoundingMode = (rmNearest, rmDown, rmUp, rmTruncate);

procedure Set8087CW(NewCW: Word);
begin
 Default8087CW := NewCW;
 asm
       FNCLEX  // don"t raise pending exceptions enabled by the new flags
{$IFDEF PIC}
       MOV     EAX,[EBX].OFFSET Default8087CW
       FLDCW   [EAX]
{$ELSE}
       FLDCW   Default8087CW
{$ENDIF}
 end;
end;

function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;
var
 CtlWord: Word;
begin
 CtlWord := Get8087CW;
 Set8087CW((CtlWord and $F3FF) or (Ord(RoundMode) shl 10));
 Result := TFPURoundingMode((CtlWord shr 10) and 3);
end;


← →
Романов Р.В. ©   (2004-04-30 12:55) [5]

function Get8087CW: Word;
asm
       PUSH    0
       FNSTCW  [ESP].Word
       POP     EAX
end;


← →
MakNik ©   (2004-05-05 10:53) [6]


> Романов Р.В. ©   (30.04.04 12:55) [5]

Для значений rmDown, rmUp, rmTruncate - все работает, а вот для rmNearest - прежняя проблема (а нужно как раз rmNearest). Подскажите, плз., в чем проблема?


← →
Романов Р.В. ©   (2004-05-05 12:44) [7]

Прям и не знаю. Числа точно одинаковые? Сделай тестовую программу, которая будет считывать число в двоичном виде из файла и выводить на экран.


← →
MakNik ©   (2004-05-05 13:35) [8]

Числа одинаковые. Может дело в железе? Что делать?


← →
Романов Р.В. ©   (2004-05-05 13:45) [9]

Напиши свою процедуру.

if Frac(Value) < 0.5 then
 Result := Trunc(Value)
else
 if Frac(Value) > 0.5 then
   Result := Trunc(Result + 1)
 else
   If Frac(Value) mod 2 = 1 then
     Result := Trunc(Result + 1)
   else
     Result := Trunc(Value);



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
1-1083743709
half_litre
2004-05-05 11:55
2004.05.23
Переход с Delphi 3 на Delphi 7


14-1083696618
gn
2004-05-04 22:50
2004.05.23
А на чём ездят мастера, в смысле марка ну или на худой конец вид?


14-1083217242
han_malign
2004-04-29 09:40
2004.05.23
WebFile.ru - открылся прикольный сервис...


1-1084351959
Litr
2004-05-12 12:52
2004.05.23
Форма


1-1084355615
BlackTiger
2004-05-12 13:53
2004.05.23
Проебразовать "&amp;#1092;&amp;#1099;&amp;#1074;" в читабельный вид.




   Наверх