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