在C ++中不使用char类型定义'999e999'值

时间:2018-11-11 18:45:06

标签: c++

是否可以在不使用999e999类型的情况下定义char的值?

即使在unsigned long long的情况下,我也尝试定义它,但是编译器一直在给我constant too big错误。

谢谢。

3 个答案:

答案 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 longlong double(尽管有些常数可能只是浮点无穷大)。

您可能对std::numeric_limits<T>::infinity()(对于floatdoublelong 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)定义类似整数的类型。但是,您仍然需要编写一组运算符来使用您的新巨型类型。同样,在大多数情况下,当您使用如此大的数字时,不需要精确的表示形式,这就是为什么floatdouble之类的浮点类型很有用的原因。