我想要做的是计算一个数字 N 的平方根,而不是我们必须用 P 正确的十进制值存储这个平方根。例如
Lets,N=2 and P=100
//I want to store square root till P correct decimal values
like storing
1.41421356237309504880...till 100 values
编辑 - 最初我问过具体的c ++问题,但正如 vsoftco 所说的那样,没有boost,c ++几乎不可能做到这一点。所以我也标记了python并没有删除c ++标签,希望在C ++中得到正确的答案
答案 0 :(得分:1)
C ++使用floating-point类型(例如float
,double
等)来存储浮点值并执行浮点运算。这些类型的大小(直接影响它们的精度)是实现定义的(通常你不会获得超过128位的精度)。此外,精确度是一个相对术语:当您的数字增长时,您的精确度越来越低。
所以,回答你的问题:使用标准C ++类型存储任意精度的数字是不可能的。您需要使用多精度库,例如Boost.Multiprecision
使用Boost.Multiprecison的示例代码:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>
int main()
{
using namespace boost::multiprecision;
typedef number<cpp_dec_float<100> > cpp_dec_float_100; // 100 decimal places
cpp_dec_float_100 N = 2;
cpp_dec_float_100 result = sqrt(N); // calls boost::multiprecision::sqrt
std::cout << result.str() << std::endl; // displays the result as a string
}
如果您使用Python,则可以使用decimal
模块:
from decimal import *
getcontext().prec = 100
result = Decimal.sqrt(Decimal(2))
print("Decimal.sqrt(2): {0}".format(result))
答案 1 :(得分:0)
嗯,有一个建议的c ++扩展,它定义了http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2849.pdf中描述的decimal
类型系列。在现代gcc版本中有一些支持它,但它仍然没有满,即使在4.9.2
也许这对你来说是可行的。