是否可以在不使用999e999
类型的情况下定义char
的值?
即使在unsigned long long
的情况下,我也尝试定义它,但是编译器一直在给我constant too big
错误。
谢谢。
答案 0 :(得分:4)
是否可以在不使用char类型的情况下定义
999e999
值?
否,使用固有的c ++数据类型是不可能的。这是一种可以在c ++中以unsigned long long
类型保存的大数字的方法。
对于现代FPU体系结构,long double
类型将使您可以使用基于10的指数,该指数尽可能大。
可以使用std::numeric_limits
这样的工具探索当前CPU架构可以实现的目标:
#include <iostream>
#include <limits>
int main() {
std::cout<< "max_exponent10: " << std::numeric_limits<long double>::max_exponent10 << std::endl;
}
输出:
max_exponent10: 4932
请参见online demo
您必须使用第三方库(例如GMP)或编写自己的算法来处理此类大数。
答案 1 :(得分:2)
在大多数(如果不是全部)实现中,该常数太大而无法表示为unsigned long long
或long double
(尽管有些常数可能只是浮点无穷大)。
您可能对std::numeric_limits<T>::infinity()
(对于float
,double
或long double
)或std::numeric_limits<T>::max()
感兴趣。
答案 2 :(得分:2)
我甚至尝试使用unsigned long long定义它,但是编译器不断给我带来太大的错误。
当然可以。 long long
通常为64位长,为您提供log(2^64) ≅ 19
的十进制数字精度。 999e999 ≅ (10^3)^1000
,长度约为3000个十进制数字,或接近10,000位。因此,999e999
不仅对long long
来说太大,而且在很大的程度上也太大了。
是否可以在不使用char类型的情况下定义999e999值?
好的。您可以基于某种整数数组(例如long long
)定义类似整数的类型。但是,您仍然需要编写一组运算符来使用您的新巨型类型。同样,在大多数情况下,当您使用如此大的数字时,不需要精确的表示形式,这就是为什么float
和double
之类的浮点类型很有用的原因。