为啥 Boost::multiprecision::sqrt(1) 返回 0?
Posted
技术标签:
【中文标题】为啥 Boost::multiprecision::sqrt(1) 返回 0?【英文标题】:Why does Boost::multiprecision::sqrt(1) return 0?为什么 Boost::multiprecision::sqrt(1) 返回 0? 【发布时间】:2016-10-30 20:23:16 【问题描述】:Boost::multiprecision::sqrt(1) 似乎返回 0
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/number.hpp>
#include <iostream>
using std::cout;
using std::endl;
int main()
namespace mp = boost::multiprecision;
mp::cpp_int i(1);
cout << "i == " << i << endl;
cout << "mp::sqrt(i) == " << mp::sqrt(i) << endl;
输出: 我 == 1 mp::sqrt(i) == 0
我希望 sqrt(1) == 1。
我在coliru 和本地安装的 gcc 和 Boost 1.62 上得到了相同的结果。这会发生在其他人身上吗?我错过了什么还是这是一个错误?
【问题讨论】:
Eeerm,你还能期待什么? 我希望 sqrt(1) == 1 这看起来 100% 像一个错误,并且对边缘情况的测试非常糟糕。 coliru.stacked-crooked.com/a/068a750da56b55d1 【参考方案1】:是的,这绝对是一个错误。 3 天前,它以ticket #12559 的身份向 Boost 错误跟踪器报告。
【讨论】:
谢谢!不知道我是如何在错误跟踪器中错过这个的。以上是关于为啥 Boost::multiprecision::sqrt(1) 返回 0?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在这里使用 boost::multiprecision::cpp_int 会影响尾调用优化
boost::multiprecision 中随机,种子无法编译
具有固定精度的重载 boost::multiprecision::pow