一个double(给定数量的字节,具有合理的尾数/指数平衡)是否总能完全精确地保持无符号整数的范围是该字节数的一半?
例如,8字节双精度可以完全精确地保持四字节无符号整数的范围吗?
这将归结为如果两个字节的浮点数可以保持一个字节无符号整数的范围.
一个字节的无符号int当然是0 - > 255.
关于最小化浮点运算中的错误,如果我在C中执行如下操作:
float a = 123.456;
float b = 456.789;
float r = 0.12345;
a = a - (r * b);
Run Code Online (Sandbox Code Playgroud)
如果我将乘法和减法步骤分开,计算结果是否会改变,即:
float c = r * b;
a = a - c;
Run Code Online (Sandbox Code Playgroud)
我想知道CPU是否会以不同方式处理这些计算,从而在一种情况下误差可能会更小?
如果不是,我认为无论如何,是否有任何良好的经验法则来缓解浮点错误?我可以按照有用的方式按摩数据吗?
请不要只说"使用更高的精度" - 这不是我所追求的.
编辑
有关数据的信息,在一般意义上,当操作导致非常大的数字(如123456789)时,错误似乎更糟.小数字(例如1.23456789)似乎在操作后产生更准确的结果.我想象这个,还是扩大数字有助于准确?