現在、DirectX9.0bを使用し、3Dのモデルを表示するプログラムを
作成しております。
環境<OS:WindowsXPSP2+IE6SP2+Delphi7ent>
ShowMessage(floattostr(1.0));
を実行すると
0.99999998430675
と表示されてしまいます。
DirectXを使用しないプログラムだと(同じパソコン上です)結果は
1
となります。
似た現象として、
NewDate,NewDate1,NewDate2,NewDate3 : TDateTime;
NewDate := StrToDateTime('2005/03/31 00:00:00');
NewDate1 := NewDate + 1;
NewDate2 := NewDate + 2;
NewDate3 := NewDate + 3;
の各値をDateTimeToStrの引数に渡すと下記の結果になります。
2005/03/31 0:00:59
2005/03/31 23:58:24
2005/04/02 0:00:12
2005/04/03 0:01:59
DirectXを使用した時、小数の扱いが変わっているみたいです。
似た現象に遭遇した方、解決への糸口、何でもかまいません。
ご教授お願いします。
これだけでは何ともいえませんが…。
DirectXとは、Windowsの仕組みを迂回して、直接ハードウェアをさわる仕組みです。
http://www.netlaputa.ne.jp/~hatahara/qa47.html( Ctrl+F で、DirectXを検索する )
故に、その実数を格納しているメモリ領域を破壊してしまった可能性があります。
返事ありがとうございます。
メモリ破壊だとすると特定するのがむずかしそうです。
WinAPIで一時的に、実数の有効桁数を変えたりするものの存在とは
有り得ないでしょうか。
SetPrecisionMode(pmDouble);
ShowMessage(floattostr(1.0));
でどうでしょう。
他の計算に影響が出るかもしれませんので、SetPrecisionModeの戻り値を再度設定してやってください。
Set8087CW(Default8087CW{=$1332})
とか
Set8087CW($133F)
なんかは?
ツイート | ![]() |