在win7 64位系统下, 一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).比如: 40725.0001597563 + 0.72490458022 (两个数值均为Double类型).正确答案是: 40725.72506433652但是..... 在注入的DLL里面计算的结果是: 40725.7251502359
请大家帮我看看, 产生错误结果的可能原因是什么? 非常感谢!=============
提供我的试验代码:Memo1.Lines.Add(FloatToStr(40725.0001597563 + 0.72490458022));
请大家帮我看看, 产生错误结果的可能原因是什么? 非常感谢!=============
提供我的试验代码:Memo1.Lines.Add(FloatToStr(40725.0001597563 + 0.72490458022));
解决方案 »
- 请教一个webbrowser控件自动填表的问题
- ClientDataSet查询提示'0.0' is not a valid timestamp
- 关于三层结构服务器的问题....(在线等待)
- 如何在DBGrid中实现“返回”功能
- autoCAD实体对象复制,在线等待,qq:17320683
- ondrawdatecell不取作用
- dbexpress中的TSQLConnection的简单问题,高手看一下。
- DBimage如何存储jpg格式的图片?
- 关于webservice客户端问题
- 抓取屏幕上一点的颜色应该怎么做?
- delphi 求不规则图形面积
- 怎样保存xmlhttp.responseXML返回的信息
MOV DWORD PTR SS:[EBP-4],40E3E2A0 ;
MOV DWORD PTR SS:[EBP-10],17187F0C ;
MOV DWORD PTR SS:[EBP-C],3FE7326B ;
FLD QWORD PTR SS:[EBP-8] ; 入栈: 40725.00015975630
FADD QWORD PTR SS:[EBP-10] ; + 0.72490458022
FSTP QWORD PTR SS:[EBP-18] ; 结果出栈: 40725.725064336522310跟踪DLL注入目标进程后的计算过程.MOV DWORD PTR SS:[EBP-8],14F0883 ;
MOV DWORD PTR SS:[EBP-4],40E3E2A0 ;
MOV DWORD PTR SS:[EBP-10],17187F0C ;
MOV DWORD PTR SS:[EBP-C],3FE7326B ;
FLD QWORD PTR SS:[EBP-8] ; 入栈: 40725.00015975630
FADD QWORD PTR SS:[EBP-10] ; + 0.72490458022
FSTP QWORD PTR SS:[EBP-18] ; 结果出栈: 40725.726562500000000
绝对没有的. 本来我是用 now 函数取时间, 发现无论mouse点几次, 时间都是不变的...后来深入看了一下. 发现根本原因是浮点数计算有点乱来..
function Now: TDateTime;
{$IFDEF MSWINDOWS}
var
SystemTime: TSystemTime;
begin
GetLocalTime(SystemTime);
with SystemTime do
Result := EncodeDate(wYear, wMonth, wDay) +
EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;
{$ENDIF}
上面函数的 encodedate 与 encodetime 结果都正确, 但是 result 的结果是错误的.后面我就用两个double相加做试验. 果然结果不对.