我有一个程序,其中我将长度(以cm为单位)和角度(以弧度表示)表示为浮点数。我的长度通常在10到100之间,而我的角度通常在0到1之间。
我知道所有浮点操作都会丢失精度,但我的问题是:
由于我的两个数值领域之间存在巨大差距,我是否会失去额外的精确度?如果我将长度单位改为米,这样我的通常长度值介于0.1和1之间会不会更好,这与我通常的角度值相当匹配?
答案 0 :(得分:2)
浮点的意思是该点浮动。除量化效果外,更改数字的大小不会改变相对误差。
浮点系统表示一个数字 x ,其值为 f ,指数 e 具有一些固定的基数 b (例如,2表示二进制浮点数),因此 x = f b < EM>电子 。 (通常标志与 f 分开,但为了简单起见我省略了。)如果将正在使用的数字乘以 b 的任何幂,则加法和减法将操作完全相同(如果你校正了附加因素,乘法和除法也是如此),直到格式的边界。
如果乘以其他数字,则舍入可能会产生很小的影响。执行操作时,必须将结果四舍五入为 f 部分的固定位数。此舍入误差是 f 的最低有效位的一小部分。如果 f 接近1,则相对于 f 的大于 f 接近 2 < / em>的
因此,如果将数字乘以256(2的幂),加上并除以256,结果将与直接添加数字相同。如果乘以100,加上并除以100,则可能会有很小的变化。乘以100后,您的某些数字会将 f 部分移近2,而有些部分会将 f 部分移近2。
通常,这些更改实际上是随机的,您无法使用此类缩放来改善结果。只有在特殊情况下才能控制这些错误。