【问题标题】:Square root of a 100 digit number in C++C++中100位数字的平方根
【发布时间】:2013-04-14 11:02:48
【问题描述】:

'unsigned long long'最多可以解出15位数字。

有没有办法找到 100 位数字的平方根

【问题讨论】:

  • 我知道这可能不是您想要的,但如果您不需要确切的结果,您可以使用double
  • @Detheroc 这将是使用牛顿法等算法计算实际值的良好第一步。

标签: c++ square-root


【解决方案1】:

您也可以使用 Boost.Multiprecision 库。这个库为一些流行的多精度实现提供了包装器。

#include <iostream>
#include <string>
#include <utility>

#include <boost/multiprecision/mpfr.hpp>

int main()
{
    std::string s(100, '0');
    s.at(0) = '1';
    boost::multiprecision::mpfr_float_100 f(std::move(s));
    boost::multiprecision::mpfr_float_100 sqrt = boost::multiprecision::sqrt(f);
    std::cout << sqrt.str() << std::endl;

    return 0;
}

【讨论】:

    【解决方案2】:

    当然。一种简单的方法是使用 GNU 多精度库的 mpz_sqrt() 函数。

    【讨论】:

      【解决方案3】:

      这个问题与 C++ 没有真正的关系,但这里有一个你可以使用的方法列表http://en.wikipedia.org/wiki/Methods_of_computing_square_roots

      取决于它是否做功课,您也许可以使用预制库来处理 bignums

      【讨论】:

        猜你喜欢
        • 2012-01-20
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多