加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi的时间 x87 fpu control word 精度设置的不够

发布时间:2020-12-15 09:55:46 所属栏目:大数据 来源:网络整理
导读:在win7 64位系统下,一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的). 比如: 40725.0001597563 + 0.72490458022 (两个数值均为Double类型). 正确答案是: 40725.72506433652 但是..... 在注入的DLL里面

在win7 64位系统下,一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).
比如: 40725.0001597563 + 0.72490458022 (两个数值均为Double类型).
正确答案是: 40725.72506433652
但是..... 在注入的DLL里面计算的结果是: 40725.7251502359
请大家帮我看看,产生错误结果的可能原因是什么? 非常感谢!
提供我的试验代码:
Memo1.Lines.Add(FloatToStr(40725.0001597563 + 0.72490458022));

?

这个显然是因为该程序的?x87?fpu?control?word?精度设置的不够,只支持单精度浮点运算的结果。可以用?delphi?rtl?自带的?Get8087CW/Set8087CW?取得/设置该16位值。在该线程中取得?x87?cw?的值,用16位形式表示成?0xABCD,该线程的?B?应该为0,把该位设置为2或3即可(delphi?默认为3,用来支持80位的?Extended?类型)。到?intel?手册?basic?卷里找?x87?fpu?章里的说明,看看就明白了。

至于你说在?xp?下没错,我很怀疑注入的是否为同一个程序,一般编译器都会对该标志位进行设置

?

https://bbs.csdn.net/topics/370045425

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读