【发布时间】:2010-10-28 14:44:43
【问题描述】:
我正在做一些浮点运算并且有精度问题。对于相同的输入,两台机器上的结果值不同。我阅读了@@Why can't I multiply a float? 的帖子并阅读了网络上的其他材料,并了解到它与浮点的二进制表示和机器 epsilon 上的有关。但是,我想检查是否有办法解决这个问题/C++ 中浮点运算的一些解决方法?我正在将浮点数转换为无符号的存储短,并在必要时转换回来。但是,当我将其转换回 unsigned short 时,精度(到小数点后 6 位)在一台机器上保持正确,但在另一台机器上失败。
//convert FLOAT to short
unsigned short sConst = 0xFFFF;
unsigned short shortValue = (unsigned short)(floatValue * sConst);
//Convert SHORT to FLOAT
float floatValue = ((float)shortValue / sConst);
【问题讨论】:
-
到底是什么问题?在两台不同的机器上乘法结果略有不同这一事实本身并不是问题。为什么它适合你?
-
由于没有说明实际问题,因此无法正确回答此问题。投票结束不是一个真正的问题。
-
另一台机器的精度是多少? 1 位小数? 5?
-
提供来自两台机器的示例结果,用于相同的输入和每种情况下使用的处理器的详细信息,以及编译器和编译器选项(如果它们不同)。
标签: c++ floating-point precision multiplication epsilon