假设我有两个浮点数,x
and y
,他们的价值观非常接近。
计算机上可以表示离散数量的浮点数,因此我们可以按升序枚举它们:f_1, f_2, f_3, ...
。我希望找到距离x
and y
在此列表中(即它们是 1、2、3……还是n
离散步骤分开?)
是否可以仅使用算术运算来做到这一点(+-*/
),而不是看二进制表示?我主要感兴趣的是它在 x86 上的工作原理。
假设以下近似值正确吗y > x
然后x
and y
仅相距几步(例如
(y-x) / x / eps
Here eps
表示机器 epsilon。 (机器 epsilon 是 1.0 和下一个最小浮点数之间的差。)
浮点数按字典顺序排序,因此:
int steps(float a, float b){
int ai = *(int*)&a; // reinterpret as integer
int bi = *(int*)&b; // reinterpret as integer
return bi - ai;
}
steps(5.0e-1, 5.0000054e-1); // returns 9
这样的技术在比较浮点数时使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)