问题标签 [boost-multiprecision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
164 浏览

c++ - 带有 boost::multiprecision 的单元测试

自从调整了一些代码以启用多精度后,我的一些单元测试开始失败。头文件:

主要测试文件:

请注意,当定义FLOATdouble类型时,所有测试都通过。让我感到困惑的是,在打印确切的预期值和实际值时(参见 AreaTest1),我们看到了相同的结果。但是报告的错误BOOST_TEST是:

g++ SCRATCH_UnitTestBoost.cpp -o utb.o -lboost_unit_test_framework.

问题:

  1. 为什么测试失败?
  2. 为什么使用toleranceinAreaTestTol没有给出此处记录的输出?

相关资料:

  1. 带浮点比较的公差
  2. 多精度类型的陷阱
0 投票
1 回答
135 浏览

c++ - 播种独立位引擎,提高多精度

我有一个简单的拒绝抽样应用程序,它包含在一个类中并在外部使用,如下面的虚拟示例所示。我能够将这篇文章改编为 boost::multiprecision 用例。但是我不确定如何适当地播种generator并且找不到任何random_device等效的提升。

下面的代码“有效”,但如果您快速连续多次运行它,您将获得我不想要的相同随机数。有比 更敏感的东西time(NULL)吗?

0 投票
2 回答
76 浏览

random - 具有固定种子和可变精度的 boost::multiprecision 随机数

在 rng 中使用固定种子时,当精度发生变化时,结果无法重现。也就是说,如果更改模板参数cpp_dec_float<xxx>并运行以下代码,则会看到不同的输出(对于精度的每次更改)。

我猜似乎有道理。但是我该如何做到这一点,以便对于n精度数字,固定种子将产生一个数字x,该数字相当于为数字定义的数字y内?例如nyn+1

0 投票
1 回答
90 浏览

c++ - 如何使用 boost 生成不同位的随机多精度整数?

我需要生成大量各种位的随机多精度整数(boost mpx_int)。我目前的方法是基于这两个例子:boost multiprecision randomconstexpr array。要以这种方式生成随机数,我需要将位数作为 constexpr。我可以生成一个 constexpr int 数组,但后来我卡住了,因为我无法从 for 循环中访问它们。

代码示例:

0 投票
2 回答
163 浏览

c++ - 具有固定精度的重载 boost::multiprecision::pow

以下代码

boost::multiprecision::pow由于无法识别固定精度类型,因此无法编译。通常的解决方案是什么?我宁愿有一个pow同时接受多精度和固定精度类型的函数。对我来说很奇怪 boost 常量,例如,有模板定义

工作正常。不应该boost::multiprecision::pow也超载吗?

0 投票
1 回答
87 浏览

c++ - 在 cpp_int 上设置位

cpp_int愚蠢的问题,但是,从库中设置位是否boost与正常数字一样工作?

例如,我尝试在数字上设置一些位,如下所示:

我拥有的toBinary(cpp_int&x)方法以最简单的方式从数字中获取位:

我能理解一开始丢失 14 个零,但我不明白为什么不丢失 14 而是 20 个整数。我对boost图书馆相当陌生,所以这很可能是一个新手错误。

0 投票
1 回答
100 浏览

c++ - boost::multiprecision::cpp_int 被复制然后每次我尝试打印它时删除

当我cpp_int从 Boost 打印 a 时,似乎整个对象都被复制了。

令人困惑的是,打印的重载是ostream& operator<<(ostream&, const T&),但传递*u给诸如template <typename T> void cr(const T&) {}不显示任何新内存分配的函数。我也尝试过u->str(),但这也会导致第二次内存分配。

我还尝试为以下内容重载 cout cpp_int

但结果是一样的。然而,我也很惊讶这个编译,因为我预计已经有一个重载。我的假设是我可能需要修改更多后端的东西。

我怎样才能避免这种情况?我不想每次打印cpp_int.

如果没有,切换数据类型也不是不可能的,只要接口相似以进行最少的重构即可。

0 投票
0 回答
107 浏览

c++ - boost::multiprecision::cpp_dec_float - 使用“auto const”时的表达式模板令人惊讶的行为?

我花了一天的大部分时间来跟踪这个例子中的问题:

输出

似乎val对依赖项的依赖违反了 const 承诺。

  1. 将auto const更改为float_t const可以解决问题。

  2. 使用cpp_bin_float解决了这个问题

  3. 随机怀疑,禁用表达式模板可以解决问题

这发生在多个 VS 版本、mingw8.1 和 Coliru 上。

任何更熟悉内部运作的人可以解释发生了什么吗?

0 投票
0 回答
153 浏览

c++ - 不能包含

我有一个简单的程序,我想在其中使用<boost/multiprecision/mpfr.hpp>.

ex.xpp

但是,当我尝试编译时,出现以下错误:

我两个都gmp安装mpfr/usr/local/include/,我真的不明白可能是什么问题,我在互联网上也没有找到有同样问题的人,你知道吗?

0 投票
1 回答
64 浏览

c++ - 从浮点值实例化 Boost cpp_dec_float 时是否可以强制截断?

我们正在编写软件,对具有 8 个固定十进制数字(后面的 8 个十进制数字.)的数字进行算术运算。

我们曾多次被内置浮点类型的有限精度所困扰double,主要是在相等比较(在小数点后第 17 位附近失败)。所以我们尝试转向一些固定精度的十进制类型。

从它的文档来看,cpp_dec_float应该是这样一种类型。所以我们using Decimal = doubleusing Decimal = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<8>>;

如果我们从字符串实例化,一切都会正常工作Decimal,但是当它从浮点文字实例化时会出现复杂情况:

上面的断言失败了,因为左侧的 Decimal 实例似乎带有用于初始化它的文字的不精确表示,即使这个 epsilon 远远超出了所要求的精度 8

有没有办法获得“在实例化时截断”行为,所以上述断言得到满足?(理想情况下,该解决方案不需要触摸发生此类实例化的所有调用站点)