|
1
13
|
|
|
2
8
大多数语言都有内部函数或库函数,用于获取下一个或上一个单精度(32位)和/或双精度(64位)数。 对于32位和64位浮点运算的用户来说,正确理解基本结构对于避免使用它们带来的一些危险非常有用。IEEE标准的应用是一致的,但仍有许多细节有待于实现者。因此,基于机器字表示的位操作的平台通用解决方案可能有问题,并且可能依赖于诸如endian等问题。虽然了解它如何能够或应该在位级别工作的所有血腥细节可能显示出智能能力,但最好使用为每个平台量身定制的内部或库解决方案,并且在支持的平台上具有通用API。 我注意到了C和C++的解决方案。以下是一些Java: 数学.nextUp: 公共静态double nextUp(double d):
特殊情况:
参数:
返回:
公共静态float nextUp(float f):
特殊情况:
参数:
返回:
接下来的两个使用起来有点复杂。然而,朝着零或朝着正或负无穷大的方向似乎更有可能和有用。另一个用途是在两个值之间存在中间值。可以确定在循环和计数器两个值之间存在多少个值。而且,它们和nextUp方法似乎对于for循环中的增量/减量非常有用。 数学.nextAfter: public static double nextAfter(双启动, 双向)
特殊情况:
参数:
返回:
公共静态浮点nextAfter(浮点开始, 双向)
特殊情况:
参数:
返回:
|
|
3
5
正如Thorsten S.所说,这可以通过
所以你可以这样做:
这不适合
|
|
|
4
2
是的,有办法。 在C#:
增加可以加上或减去。 |
|
|
5
1
我不确定我在关注你的问题。当然是IEEE标准 是 完全一致?例如,看看这段摘自 wikipedia article 对于双精度数字。
在二进制或十六进制表示中,仅仅递增最低有效位有什么问题? 至于特殊的数字(无穷大,NaN等),它们定义得很好,而且没有很多。限制的定义类似。 既然你已经调查过了,我想我找错了方向。如果这还不足以解决你的问题,你能试着澄清一下你想要达到的目标吗?你的目的是什么? |
|
|
6
1
关于ε函数,它是估计二进制二进制数的小数值的距离有多远的估计。这是因为,对于非常大的正十进制数或负十进制数或非常小的正十进制数或负十进制数,它们中的许多映射到与双精度数相同的二进制表示形式。尝试一些非常大或非常小的十进制数,从中创建双精度数,然后转换回十进制数。你会发现你不会得到相同的十进制数,而是得到最接近的那个。 对于接近1或-1的值(接近于小数倍可以表示的大范围值),epsilon将为零或非常非常小。对于逐渐走向+或-无穷大或零的值,epsilon将开始增长。当数值非常接近零或无穷大时,epsilon将非常大,因为这些范围内的十进制值的可用二进制表示非常稀疏。 |