How to set the control word of FPU in delphi
2415 단어 Delphi
In delphi, it provide us two function named “Set8087CW” and “Get8087CW” to set and read the control word of FPU. Function Set8087CW sets both the control word in the floating-point unit and the variable System.NoErrMsg declared in the system unit. The floating-point unit control word controls the precision of floating-point calculations, the rounding mode, and whether certain floating-point operations trigger exceptions. See the Intel processor documentation for details.
This routine allows you to have direct access to the CW. Be aware that using this routine to change the value of the 8087CW changes the behavior of the program's FP calculations. To avoid this, reset it.
It is recommend that you disable all floating-point exceptions when using OpenGL to render 3D graphics. To do this, call Set8087CW(0x133f) in your main form's OnCreate event before calling any OpenGL functions.
Following is the example:
var
Form1: TForm1;
Saved8087CW: Word;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text := FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit2.Text));
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if RadioGroup1.Items[RadioGroup1.ItemIndex] = 'FPU Exceptions' then
System.Set8087CW(Saved8087CW);
if RadioGroup1.Items[RadioGroup1.ItemIndex] = 'No FPU Exceptions' then
System.Set8087CW($133f); { Disable all fpu exceptions. }
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Items.Add('No FPU Exceptions');
RadioGroup1.Items.Add('FPU Exceptions');
RadioGroup1.ItemIndex := 2;
Saved8087CW := Default8087CW; // Save this because Set8087CW changes it.
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
System.Set8087CW(Saved8087CW); // Default value (with exceptions) is $1372.
end;
주: 본문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.