头条 科技 产经 家电 智能 手机 芯片 数码 电商 WAP版
中国IT产经新闻网-移动互联网与智能搜索领域是未来IT产业发展的趋势!
中国IT产经新闻/数码电子/正文
invalid floating point operation—非法浮点指针错误
来源:
2023-08-18
编辑:晓露

    

Invalid floating point operation:非法的浮点指针操作有代码错误。delphi“Invalid floating point operation.”错误如何解决?
      导致原因:在Delphi2011中需要通过浮点单位控制指令设置浮点运算单位。浮点单位控制指令控制着浮点运算的精度、四舍五入的方式以及特定的浮点运算是否触发异常。可以参阅Intel处理器的详细文档。在Delphi2011中有函数可以直接访问处理器的控制指令。比如,可以使用Set8087CW函数改变8087CW控制指令的值,从而改变程序浮点计算的行为。编程人员需要自己负责在程序结束时重置这个指令。
      解决办法,就是直接禁用浮点异常,方法如下:在Delphi2011中,当使用OpenGL进行3D渲染时,推荐使用Set8087CW函数禁用浮点异常。可以在调用OpenGL函数之前,比如在mainForm的OnCreate的过程中写入: Set8087CW(0x133f)
      实例代码:
      1.声明全局的变量保存原有的8087CW设置
      var
      Saved8087CW: Word;
      2.在mainForm的OnCreate过程中改变8087CW的值,改变之前先保存默认值
      Saved8087CW := Default8087CW;
      Set8087CW($133f); { Disable all fpu exceptions }
      3.在程序结束前,使用默认值重置8087CW指令值。在mainForm的OnClose过程中
      Set8087CW(Saved8087CW);
      4.还有一点需要注意,如果在程序中使用了SceneControl.LoadSxFile载入了3D文档,那么必须在程序退出时,在Set8087CW之前调用IScene的ClearLayers方法清除图层,否则程序在退出时会出现异常。
      参考代码为:
      SceneControl1.Scene.ClearLayers;
      Set8087CW(Saved8087CW);
      5.还有在程序退出之前需要调用如下语句
      (CoAoInitialize.Create as IAoInitialize).Shutdown。

产业点评更多
厂商动态更多
热门综合更多
CopyRight @ 2008-2023 中国IT产经新闻网 All Right Reserved 违者必究 湘ICP备2022017330号-2