是否有一种原生的C++变量类型比double "更大"?
float是7
double是15(当然这取决于编译器)
是否有任何更大的本地或非本地类型?
C++有long double
类型,但不能保证它比普通的double
类型更精确。在x86平台上,通常double
类型占64位,而long double
类型则为64位或80位(如果我没记错的话,这将给你提供19位有效数字)。
你的结果可能有所不同,特别是如果你不在x86平台上。
一个长双精度浮点数通常只使用10个字节,但由于对齐而可能在结构体中占用12或16个字节(取决于编译器和选项)。
这个10字节的长双精度浮点数提供了64位的尾数;当您想要存储64位整数到浮点数中时,这非常方便,不会失去精度。
在C++中,还有一些各种各样的bigfloat/bigint库可以实现任意精度计算。例如,Microsoft Codeplex上有这个库,但是通过Google搜索也可以找到其他很多库。
C++有long double,但仍然相当有限。如果要获得更好的精度,请尝试使用GNU的gmp库。您可以设置任意大小的数字,并且在使用gmp_add而不是普通的+时很有趣和hackish。我确定有一个C++包装器。
long long double只有一些CPU支持使用它...
long double通常具有15位有效数字的精度。
Boost 1.53或更高版本具有多精度功能。
http://www.boost.org/doc/libs/1_54_0/libs/multiprecision/doc/html/index.html