可以用C编程语言表示的1 /(2 ^ x)的最小精确表示是什么?
答案 0 :(得分:5)
在大多数平台上,C double
与IEEE 754 double precision format相同。支持的最接近的正值为2 ^ -1022(等于1/2 ^ 1022)。
但是,如果您允许用户定义类型,则没有限制,因为您始终可以将指数表示为bigint。
答案 1 :(得分:3)
使用IEEE-754 double
进行算术运算,最小的精确值为1/2 ^ n:
double
中两个最大可表示的精确幂。0x1.0p-1074
或0x0.0000000000001p-1022
。如果你使用另一种类型,在x86机器上说long double
,并且编译器将其映射到80位浮点数,那么最小值可以小得多(2 ^ -16446,假设我做了我的算术正确=)
答案 2 :(得分:1)
如果您使用GNU MP library(用C语言编写),那么您可以表示任何高达RAM安装量的值。
答案 3 :(得分:1)
0,即1 /(2 ^ inf);)
更严重的是,这是双精度浮点数中指数位的问题。我不认为C标准本身定义了大小,但IEEE 754确实将其定义为具有11个指数位。
让我们暂时忽略非正规。由于最小指数值为-1022,因此应为1 /(2 ^ 1022)。但是那时就是非正规的情况,IIRC应该根本不包含任何隐含的1位。因此,非正规数在0..1 /(2 ^ 1022) - 范围内均匀分布,给予log2(52)更多的值IIRC。所以,我认为最终的答案应该是1 /(2 ^(1074))。
答案 4 :(得分:-1)
如果将变量存储为64位负指数,则为1/2 ^(2 ^ 63 - 1)。 :)
这是一个很小的数字。