2017-09-04 166 views
0

我希望声明一个浮点变量,它可以存储比常见的双精度和长精度精度更高的数字,最好是八进制数(256位),(我相信)可能会提供约70位有效数字。在C++中声明一个八位精度浮点变量

我该如何声明这样一个变量?跨平台兼容性会成为一个问题(与固定宽度的整数相反)?

任何帮助,非常感谢。

+3

是的,这将是一个问题,因为在C++标准中没有指定这样的数据类型。如果你搜索一下,可以找到“bignum”库,并且可以用便携的方式处理它(至少对于源代码,以及如果序列化为文本)。 –

+0

您的编译器提供八进制精度极不可能。它可能会提供四倍精度,语法不方便,缺少一些功能(在软件中模拟,https://stackoverflow.com/questions/5451447/quadruple-precision-in-c-gcc),但也有可能它没有。如果你愿意使用外部库,MPFR是一个不错的选择:http://www.mpfr.org –

+0

值得重新考虑一下你是否真的需要这么高的精度:几乎所有的计算任务都可以用*极大*精度较低的方法完成。通过在日志空间中工作,可以更好地解决一些遇到小数运算稳定性问题的任务。最后,将计算扩展到整数可能会更好。 –

回答

5

C++标准要求精度最高为并包括double;并且该浮点计划的更详细的细节留给实施。

一个IEEE754四倍精度long double只会给你36位有效数字。在撰写本文时,我从未遇到过一个系统,它实现了八进制精度

最好的办法是使用类似GNU Multiple Precision Arithmetic Library的东西,或者,如果你真的想要二进制浮点数,则可以使用The GNU Multiple Precision Floating Point Reliable Library

+2

GMP提供整数和有理数。 MPFR是一种更直接的浮点类型的多精度版本。 –