超出“unsigned long long”大小的变量如何用 C 或任何编程语言表示。是否有变量类型来表示无穷大?
4 回答
请参阅:浮点无穷大
浮点数和双精度数都有无穷大的表示。整型没有这种能力内置到语言中,但是,如果你需要它,你可以使用一些技巧来分配或INT_MAX
用于该目的。LONG_MAX
limits.h
当然,要做到这一点,您必须完全控制计算 - 您不希望常规计算以该值结束,然后从那里被视为无穷大。
对于大于可以由本机类型表示的数字,您可以使用任意精度的数学库,例如GMP。
您是在谈论表示数字无穷大,还是使用太大而无法放入单个本机数据类型的数字?对于后者,可以创建表示更大数字的数据结构,并编写自己的逻辑来实现这些结构的算术运算。
对于Project Euler的一些问题,我已经在基本层面上做到了这一点。我的方法是扩展小学使用的算法,让您可以对多位数字进行运算,方法是将它们分解为仅使用一位数加上一些进位、余数、借位等的运算。
您可能还对这篇关于任意精度算术的维基百科文章感兴趣。
unsigned long long
是最大的 C 标准整数类型,它必须能够表示至少 2 64 – 1。标准 C 中没有整数类型必须表示大于此的值。某些实现可能会提供更大的类型作为扩展,但您不能依赖它。
test.c:3: 错误:'long long long' 对于 GCC 来说太长了
标准整数类型不能表示无穷大,除非您为此目的指定了一个特定的位模式(例如,ULLONG_MAX
)。我认为浮点类型确实有无穷大的表示。您可以使用标准 C 宏检查浮点类型是否为无穷大isinf
,并且可以使用宏将浮点类型设置为无穷大INFINITY
。我认为标准 C 并不要求浮点类型能够表示正无穷和负无穷。