c060512 2015-09-22 09:13 采纳率: 0%
浏览 2582

代码在x86与X64分别编译,float类型运算结果不一致

例如:float a = 0.5739824; b = 0.3452; float c; c = a + b;
32位与64位(a+b)的结果一致,但32位在最后赋值时c的值与64位就不相同。
当c=(double)a+b时,64位的运算结果与32位的运算结果(即c的值)一致,如果不添加double,如何解决?采用vs2008.
ps。数据是随便给的,但确实存在该问题,加减乘除都该情况出现

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-09-22 10:17
    关注

    首先根据数学法则,确定正确的值是什么。看你的程序本身有没有错误。误差很大就是程序本身错了。
    如果有极微小的误差,这很正常。就算都是x86代码,甚至完全一样的代码,也不能保证每次运算的值都100%一样。所以,不能用=比较浮点数,切记。要用两数相减绝对值小于一个极小的数的方法比较浮点数。

    评论

报告相同问题?

悬赏问题

  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题