开启/关闭浮点数异常报错

Posted CodeSkill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启/关闭浮点数异常报错相关的知识,希望对你有一定的参考价值。

ZC: Delphi7 中的报错信息为(主要信息):"Invalid floating point operation"

 

1、http://bbs.csdn.net/topics/391070674  (LongWord($133f)这句是什么意思-CSDN论坛.html

  2楼:

这个应该用_control87或者_controlfp
#include <float.h>
_control87(0x133f, 0xffff);
至于LongWord($133f)这是没有什么意义的,LongWord($133f)=$0000133f,32位无符号整数,仅此而已。

  4楼:

// Default value (with exceptions) is 0x1372.这个注释是错的,默认值是0x1332。
Set8087CW是Delphi RTL函数,C++中最好还是用_control87或者_controlfp。

 

2、官方资料:

  2.1、Set8087CW (C++) - RAD Studio Code Examples.html  (http://docwiki.embarcadero.com/CodeExamples/XE8/en/Set8087CW_%28C%2B%2B%29

 

Description

This example accesses the Floating Point Unit (FPU) control register. Try turning floating point exceptions off and on and dividing a number by zero to test it.

 

Code

Word Saved8087CW;
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Edit3->Text = FloatToStr(StrToFloat(Edit1->Text) / StrToFloat(Edit2->Text));
}
 
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
  if (RadioGroup1->Items->Strings[RadioGroup1->ItemIndex] == "FPU Exceptions")
	System::Set8087CW(Saved8087CW);
  if (RadioGroup1->Items->Strings[RadioGroup1->ItemIndex] == "No FPU Exceptions")
	System::Set8087CW(0x133f); // Disable all fpu exceptions.
}
 
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  RadioGroup1->Items->Add("No FPU Exceptions");
  RadioGroup1->Items->Add("FPU Exceptions");
  RadioGroup1->ItemIndex = 2;
  Saved8087CW = Default8087CW;  // Save this, because Set8087CW changes it.
}
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  System::Set8087CW(Saved8087CW); // Default value (with exceptions) is 0x1372.
}

Uses

See Also

 

3、

4、

5、

 

以上是关于开启/关闭浮点数异常报错的主要内容,如果未能解决你的问题,请参考以下文章

内部格式为 GL_RGBA8 的纹理在片段着色器中显示为浮点数

JS浮点数相减出现异常数

ZeroDivisionError 整数异常,Nan 浮点数

C如何将两个浮点数相乘? [关闭]

带有浮点数的二维点的莫顿指数[关闭]

浮点数运算——加减乘除都有哈