问题标签 [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::polygon 和 boost::multiprecision
我正在尝试使用boost::polygon
withboost::multiprecision
来计算多边形差异,但无论我如何尝试将两者结合起来,我总是会遇到编译器错误,例如
在
以及尝试回读结果时的类似位置:
我这样做对吗?我尝试了不同的东西,coordinate_traits
但最后看起来像evalAtXforYlazy这样的惰性函数中使用的类型和表达式拒绝支持这一点。
我还尝试polygon_arbitryry_formation.hpp
在需要的地方修改和添加显式强制转换,这起初很有希望,但最终导致我在这里重载了源自这里的结果问题。
我进一步尝试boost.multiprecision
用MPIR替换,但它们甚至没有显式转换运算符,而只是用于转换的成员函数,与evalAtXforYlazy和其他函数的兼容性更差。
我究竟做错了什么?
c++ - 使用固定大小提升多精度整数保持基本类型行为
该类型在内部使用符号幅度表示,因此类型 int128_t 具有 128 位精度和一个额外的符号位。在这方面,这些类型的行为不同于基本(内置)2 的补码类型。
此行为不同于 MSB 指示符号的基本类型。
为了具有与基本整数类似的行为,文档建议:
In 可能很想改用 127 位类型,这确实有效,但行为与 2 的补码基本(内置)类型仍然略有不同,因为最小值和最大值是相同的。
我怎样才能保持与基本类型完全相同的行为,但具有固定大小的提升多精度整数,例如int512_t
?如果 boost 无法做到这一点,您是否建议任何其他库这样做?谢谢。
c++ - 为什么在评估复值积分时 boost::multiprecision::exp 会卡住?
我是 Boost C++ 库的新手,自然在使用它们时遇到了很多问题(由于缺乏可用的知识和示例:)
这些问题之一来自以下代码
当代码到达mpc_type ex2 = mpns::exp(-z*x2) ;
时,它会卡住。即,它在计算指数时挂起。我花了一些时间试图找出问题所在,但找不到解决方案。
我做了几个测试。例如,<boost/multiprecision/mpfr.hpp>
工作得很好。即,被积函数的实值版本可以集成到任意精度。我测试了mpfr
代码的 -type 版本,直到boost::multiprecision::mpfr_float_backend <2000>
.
调用 lambda 函数f
是可能的,它返回正确的数字。
我使用了不同的被积函数,例如z*x
,z*tgamma(x)
并且程序运行良好,具有相同的定义z
,x
您可以在上面的示例中找到。
我使用 Tumbleweed 提供的最新版本的 Boost 库,即boost_1_76_0-gnu-mpich-hpc-devel
编译器:g++
cpp标准:gnu++17
什么可能是这个问题的根源?
很抱歉问了一个冗长的问题。
c++ - 将二进制补码十六进制数转换为 boost::multiprecision::int256_t
我试图让 boost::multiprecision 解析一个负数(二进制补码)十六进制数:
我希望这会输出-1234。不幸的是,它输出 115792089237316195423570985008687907853269984665640564039457584007913129638702
解析无符号十六进制数可以正常工作。
如何让 int256_t 将十六进制数解释为负二进制补码?
boost - Rcpp 中的向量和 boost::multiprecision::mpq_rational
我是 C++ 初学者,希望能在这里找到一些帮助。
为了激发我的问题,我希望编写一个函数,通过无限精度或有理算术在 C++ 中执行卷积。由于我希望从 R 调用此函数(通过Rcpp),因此我从以下方法开始(基于Dirk 的示例)。
意识到我必须为我的 C++ 变量转换一个无限精度的有理类型,接下来我尝试执行类型重新转换,依赖于boost库。从一个涉及标量的简单示例开始(如下所示)...
我遇到了一个错误"cannot convert type to SEXP"
。
我在这一点上迷路了。我知道在 R 中提供类对象的gmp R 包bigq
,但不知道是否可以利用它来将mpq_rational
s 转换为 SEXP。
我的问题是:
- 如何将 boost 库有理类型转换为有效的 R 对象?(最好是
bigq
上课) - 我的推理是否有意义,或者有其他方法吗?(例如,对于
convolve5cpp
执行无限精度内部操作的向量,是否已经存在上述实现?)
非常感谢!
(2021 年 12 月 30 日更新)
感谢所有在下面留下有用评论的人。经过反复试验,我继续尝试在本地编辑gmp库中的一些源文件(可在此处获得)。
我编写了以下函数,它紧跟上面 Dirk 的示例。我镜像了 的结构operator+
,另一个定义为添加两个bigrational
s 的函数。
这没有用。在构建包时,我遇到了以下错误,看起来它们属于两大类。
- 'bigrational' 中没有名为 'size' 的成员:
int n_xa = lhs.size()
。 - 类型 'const bigrational' 不提供下标运算符:
bigrationalR::create_bigrational(lhs[i], rhs, mpq_mul)
- 使用未声明的标识符“Rcpp”:
Rcpp::Range r(0, n_xb-1)
- 使用未声明的标识符“r”:
bigrationalR::create_bigrational(xab[r],...
即,1 和 2 出现是因为我将lhs
和rhs
视为 s 的向量bigrational
;出现 3 和 4 是因为我使用了一个仅由Rcpp识别但未包含在文件中的对象。
如何解决这两个广泛的问题?对于 1 和 2,我不明白add.bigq
(它调用bigrational_add
,一个接受两个bigrational
s 的函数)如何接受两个向量,但不知何故,像上面这样的卷积函数不像那样“灵活”。对于 3 和 4,有没有可以相对简单地调用的stdlib
替代方法Rcpp::Range
,还是我必须创建自己的对象类型?
再次感谢!
c++ - 四元数的 Boost.QVMs 'normalized()' 不适用于 Boost.Multiprecision
我正在使用 Boost.QVM 并boost::multiprecision::cpp_dec_float_50
作为我的四元数的标量。
我尝试了我的程序double
而不是boost::multiprecision::cpp_dec_float_50
它并且它有效,所以我相信这是问题的原因。
我得到的错误是:
c++ - QVM - 用户定义的四元数和标量
我正在尝试boost::qvm
与boost::multiprecision
. 我构建了一个用户定义的四元数,但我无法缩放四元数。我想按多种类型对其进行缩放boost::multiprecision::cpp_dec_float_100
。贝娄是我的代码。我还用注释掉的代码尝试了它。
我得到的错误是:
c++ - Boost.Multiprecision cpp_dec_float_50 - 转换成字节数组并返回?
类似的问题:到Boost.Multiprecision cpp_int - 转换成字节数组?
但这一次与浮点值有关。
- export_bits - 似乎没有接受浮点值的重载
- cpp_dec_float_50 的肢体不对外公开
问题: 因此,应该如何解决将这种数据类型与字节数组相互转换的问题?
c++ - 将 boost::multiprecision::int256_t 转换为字符串
例如,如果我有,我将如何将 boost::multiprecision::int256_t 类型变量转换为字符串