Floating point 遍历所有可能的浮点值

Floating point 遍历所有可能的浮点值,floating-point,bit-manipulation,Floating Point,Bit Manipulation,如何列出浮点数据类型的所有可能值?我可以用C或C++中的一个结合来做这件事,但是这是可移植的吗? 如何在其他语言中实现这一点?Javascript 让我们假设我正在使用这个迭代将theta映射到sin(theta)我想不出一个可移植的方法来实现这一点。但如果给定64位表示(标准IEEE双精度),并假设生成一个值需要一纳秒,则生成所有可能的值需要500多年的时间。因此,您有足够的时间考虑一种算法:)…联合方法不太适合移植。这取决于您使用的任何类型的大小。(如果sizeof(your_fp_类型)>

如何列出浮点数据类型的所有可能值?我可以用C或C++中的一个结合来做这件事,但是这是可移植的吗? 如何在其他语言中实现这一点?Javascript


让我们假设我正在使用这个迭代将
theta
映射到
sin(theta)

我想不出一个可移植的方法来实现这一点。但如果给定64位表示(标准IEEE双精度),并假设生成一个值需要一纳秒,则生成所有可能的值需要500多年的时间。因此,您有足够的时间考虑一种算法:)…

联合方法不太适合移植。这取决于您使用的任何类型的大小。(如果sizeof(your_fp_类型)>sizeof(your_int_类型),则即使有时间,也无法在整个范围内进行迭代。)

无论采用哪种方法,都要意识到可能的浮点值并不是均匀分布在您选择的任何类型的范围内。当您远离0时,值之间的差异会变得更大。考虑到这一点,以及生成这样一个列表所需的时间,以及您甚至没有足够的HD空间来表示每个可能的双精度(我保证您没有!),更不用说RAM了……我不得不质疑创建这样一个列表的价值。查找该值所需的时间比只进行计算要长

如何列出的所有可能值 浮点数据类型

通过位旋转浮点值的大小,对于浮点值,您需要2^32个不同的表示形式,假设每个浮点值需要4个字节,则需要16GB的内存


我假设您需要正弦函数的查找表,只需按所需精度的步长从0循环到2*PI。

查看nextafter()和nextafter()的手册页。它们允许您从一个浮点数前进到下一个最接近的浮点数。您可以使用其中一个来按顺序访问每个FP编号。

除了
nextafter()
,还有一些用于显式处理尾数和指数的方法。

您实际上是在尝试在javascript中为sin构建查找表吗?如果是,为什么?您只需要一个覆盖0..PI/2的查找表。所有其他值都可以映射到这个范围(只要你注意符号等)。不完全是Andreas,这个问题完全是出于无聊的好奇心。通过使用二进制and(&)和移位(>>)来提取指数和尾数,增加尾数就等于用二进制or(|)来填充组件。我真的希望你不要那样做。在此小程序中,您可以在IEEE754@stacker,twidle_float.c(6)中使用单个位:错误C2296:“>>”:非法,左操作数的类型为“float”@Vulcan急切使用强制类型转换,如:unsigned fval=(unsigned)floatval@stacker,不存在独立于平台的保证,即unsigned和float大小相同。