如何以一定的精度存储数字?

2024-06-09 07:07:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是计算一个数的平方根,然后我们必须用正确的小数点来存储这个平方根值。对于示例

  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告诉我的那样,c++要做到这一点几乎是不可能的助推。所以呢我也已经标记了Python,并且没有删除C++标签,希望在C++

中获得正确答案。

Tags: andtostore示例rootlikedecimalvalues
2条回答

有一个c++的扩展,它定义了http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2849.pdf中描述的decimal类型族。在现代gcc版本中有一些对它的支持,但是它仍然不完整,即使在4.9.2中也是如此

也许对你来说是可行的。你知道吗

C++使用floating-point类型(如^ {CD1>},^ {CD2>})来存储浮点值并执行浮点运算。这些类型的大小(直接影响其精度)是由实现定义的(通常不会获得超过128位的精度)。而且,精度是一个相对的术语:当你的数字增长时,你的精度越来越低。你知道吗

<>所以,回答你的问题:用标准C++类型存储任意精度的数字是不可能的。为此,需要使用多精度库,例如Boost.Multiprecision。你知道吗

示例代码使用助推。多精度地址:

#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))

相关问题 更多 >