问题标签 [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.
c++ - 播种独立位引擎,提高多精度
我有一个简单的拒绝抽样应用程序,它包含在一个类中并在外部使用,如下面的虚拟示例所示。我能够将这篇文章改编为 boost::multiprecision 用例。但是我不确定如何适当地播种generator
并且找不到任何random_device
等效的提升。
下面的代码“有效”,但如果您快速连续多次运行它,您将获得我不想要的相同随机数。有比 更敏感的东西time(NULL)
吗?
random - 具有固定种子和可变精度的 boost::multiprecision 随机数
在 rng 中使用固定种子时,当精度发生变化时,结果无法重现。也就是说,如果更改模板参数cpp_dec_float<xxx>
并运行以下代码,则会看到不同的输出(对于精度的每次更改)。
我猜似乎有道理。但是我该如何做到这一点,以便对于n
精度数字,固定种子将产生一个数字x
,该数字相当于为数字定义的数字y
内?例如n
y
n+1
c++ - 如何使用 boost 生成不同位的随机多精度整数?
我需要生成大量各种位的随机多精度整数(boost mpx_int)。我目前的方法是基于这两个例子:boost multiprecision random,constexpr array。要以这种方式生成随机数,我需要将位数作为 constexpr。我可以生成一个 constexpr int 数组,但后来我卡住了,因为我无法从 for 循环中访问它们。
代码示例:
c++ - 具有固定精度的重载 boost::multiprecision::pow
以下代码
boost::multiprecision::pow
由于无法识别固定精度类型,因此无法编译。通常的解决方案是什么?我宁愿有一个pow
同时接受多精度和固定精度类型的函数。对我来说很奇怪 boost 常量,例如,有模板定义
工作正常。不应该boost::multiprecision::pow
也超载吗?
c++ - 在 cpp_int 上设置位
cpp_int
愚蠢的问题,但是,从库中设置位是否boost
与正常数字一样工作?
例如,我尝试在数字上设置一些位,如下所示:
我拥有的toBinary(cpp_int&x)
方法以最简单的方式从数字中获取位:
我能理解一开始丢失 14 个零,但我不明白为什么不丢失 14 而是 20 个整数。我对boost
图书馆相当陌生,所以这很可能是一个新手错误。
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
.
如果没有,切换数据类型也不是不可能的,只要接口相似以进行最少的重构即可。
c++ - boost::multiprecision::cpp_dec_float - 使用“auto const”时的表达式模板令人惊讶的行为?
我花了一天的大部分时间来跟踪这个例子中的问题:
输出
似乎val对依赖项的依赖违反了 const 承诺。
将auto const更改为float_t const可以解决问题。
使用cpp_bin_float解决了这个问题
随机怀疑,禁用表达式模板可以解决问题
这发生在多个 VS 版本、mingw8.1 和 Coliru 上。
任何更熟悉内部运作的人可以解释发生了什么吗?
c++ - 不能包含
我有一个简单的程序,我想在其中使用<boost/multiprecision/mpfr.hpp>
.
ex.xpp
:
但是,当我尝试编译时,出现以下错误:
我两个都gmp
安装mpfr
了/usr/local/include/
,我真的不明白可能是什么问题,我在互联网上也没有找到有同样问题的人,你知道吗?
c++ - 从浮点值实例化 Boost cpp_dec_float 时是否可以强制截断?
我们正在编写软件,对具有 8 个固定十进制数字(后面的 8 个十进制数字.
)的数字进行算术运算。
我们曾多次被内置浮点类型的有限精度所困扰double
,主要是在相等比较(在小数点后第 17 位附近失败)。所以我们尝试转向一些固定精度的十进制类型。
从它的文档来看,cpp_dec_float
应该是这样一种类型。所以我们using Decimal = double
用using Decimal = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<8>>;
如果我们从字符串实例化,一切都会正常工作Decimal
,但是当它从浮点文字实例化时会出现复杂情况:
上面的断言失败了,因为左侧的 Decimal 实例似乎带有用于初始化它的文字的不精确表示,即使这个 epsilon 远远超出了所要求的精度 8。
有没有办法获得“在实例化时截断”行为,所以上述断言得到满足?(理想情况下,该解决方案不需要触摸发生此类实例化的所有调用站点)