在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

Delphi的时间 x87 fpu control word 精度设置的不够的更多相关文章

  1. Delphi DateUtils时间单元

    Uses DateUtils //时间单元,非常有用. 记得引用这个单元,不然不能用. CompareDate 比较两个日期时间值日期部分的大小 CompareDateTime 比较两个日期时间值的大 ...

  2. Delphi日期时间 UNIX

    Delphi日期时间,就是常见的 2014-05-02 10:37:35 --------------------------------------------------------------- ...

  3. Delphi的时间处理

    这几天因为自己要学习编写一个小程序中要用到一些时间处理.就在网上搜集一些教材学习到一般的应用,做个笔记,加深印象. 用上Delphi中相应的函数,Delphi的时间处理起来还是很容易的. Delphi ...

  4. C# Word中设置/更改文本方向

    C# Word中设置/更改文本方向 一般情况下在Word中输入的文字都是横向的,今天给大家分享两种方法来设置/更改一个section内的所有文本的方向及部分文本的方向,有兴趣的朋友可以试下. 首先,从 ...

  5. Word 中设置图、表、公式、代码要与正文之间行间距

    一.概述 在撰写论文等文档时,常常对图.表.公式.代码要与正文之间行间距有要求.例如: (5)图.表.公式.代码要与正文之间有6磅的行间距. 二.设置方式 选中 图/表/公式/代码 与 图题/表头/- ...

  6. SPSS输出结果如何在word中设置小数点前面显示加0

    SPSS输出结果如何在word中设置小数点前面显示加0 在用统计分析软件做SPSS分析时,其输出的结果中,如果是小于1(绝对值)的数,那么会默认输出不带小数点的数值.例如0.362和 -0.141被显 ...

  7. 外部应用复制 表格 到word中 设置表格自适应

    word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...

  8. Delphi 日期时间函数

    DateUtils.IncYear();DateUtils.IncMonth();DateUtils.IncWeek();DateUtils.IncDay();DateUtils.IncHour(); ...

  9. Delphi 获取时间的年月日

    procedure TFrmLltj.FormActivate(Sender: TObject); var   Present: TDateTime;   Year, Month, Day, Hour ...

随机推荐

  1. 2.WHERE中使用=,>,>=,<,<=,<>,!=比较符号

        //查询工资大于等于2000的人   select * from person salary >= 2000;   //查询名字等于scott的人   select * from per ...

  2. CSS学习(四)

    伪类(Pseudo-classes) CSS伪类是用来添加一些选择器的特殊效果. 伪类的语法: selector:pseudo-class {property:value;} CSS类也可以使用伪类: ...

  3. poj3101--Astronomy(分数的最小公倍数)

    题目链接:id=3101">点击打开链接 题目大意:有n个行星,给出每个行星的旋转的周期.问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期 如果A行 ...

  4. MySQL之----在java编程加强知识点

    在数据中,建表处理是非经常见且非常有用的方法. 表和表之间的关系有 1:1  1:N         N:N 三种方式. 1对1的方式 <span style="font-size:1 ...

  5. oracle 时间戳TIMESTAMP

    //数据库 UPDATETIMESTAMP TIMESTAMP(6) //dto /** 更新时间戳 **/ private String updatetimestamp; //dao //插入操作 ...

  6. Flutter 1.5 发布,正式成为全平台 UI 框架!

    一. 序 在 Google I/O 2019 上,Dart 团队宣布推出新的 Flutter 稳定版本 1.5,这是 Flutter 迄今为止最大的一次版本发布. 伴随着 Flutter 1.5 的发 ...

  7. Ruby学习笔记(一)

    在做实验的时候,由于每次都要手工修改文件夹的名字,实在是给自己添了太多的麻烦,为了摆脱手工修改的困恼,于是产生了一个使用程序批量修改文件夹名字的好主意.为了最终实现这个目标,自然需要选择一种合适的脚本 ...

  8. Linux常用命令之rpm安装命令

    转自:http://www.cnblogs.com/datasyman/p/6942557.html 在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的全称 ...

  9. (五)api网关服务 zuul-路由

    路由是微服务架构中必须的一部分,比如,“/” 可能映射到你的WEB程序上,”/api/users “可能映射到你的用户服务上,“/api/shop”可能映射到你的商品服务商.(注解:我理解这里的这几个 ...

  10. transient修饰符的作用

    transient修饰符的作用: entity实体类: package com.baidu.entity; import com.fasterxml.jackson.annotation.JsonIg ...