Mir*_*pas 1 c++ floating-point
我需要有一些漂浮分区必须准确,就像它们的双重版本一样.我可以改变分割值 - 它代表一个映射,我可以抵消它 - 来纠正最终的浮点错误.
为了纠正错误,我使用了以下代码:
do
{
float fValue = float(x) / 1024.f;
double oldFValue = fValue;
double dValue = double(x) / 1024.0;
if(oldFValue != dValue)
{
x += 1;
}
else
{
break;
}
}while(1);
Run Code Online (Sandbox Code Playgroud)
使用此代码,for
x = 11
Run Code Online (Sandbox Code Playgroud)
我有调试器(Visual Studio 2010):
fValue = 0.010742188
oldFValue = 0.010742187500000000
Run Code Online (Sandbox Code Playgroud)
你能解释为什么可移动值与浮动值不同吗?这是调试器问题还是浮点转换问题?我问这个是因为:
if(oldFValue != dValue)
Run Code Online (Sandbox Code Playgroud)
永远不会是真的,即使它应该是.我可以用其他方式比较浮点值和双值吗?我需要浮点除法的结果与双除法完全相同.