Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
3-1083295143
vpaul
2004-04-30 07:19
2004.05.23
Базы данных


11-1071780594
Arioch
2003-12-18 23:49
2004.05.23
Какой еще Delphi 8 ?


1-1083928124
Tomkat
2004-05-07 15:08
2004.05.23
Модульное приложение в Delphi


1-1084261570
Erik
2004-05-11 11:46
2004.05.23
Внутри Try except имеется класс on E: do MyFunc(E)


3-1082970542
Ant
2004-04-26 13:09
2004.05.23
Графики Ганнта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский