问题标签 [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.
boost - 提升多精度 cpp_dec_float 仅与所需精度进行比较
我正在将 boost::multiprecision 库用于十进制浮点类型,并希望将两个浮点数与指定的精度进行比较。
但是, cpp_dec_float 似乎将数字与指定的精度进行比较,但还包括保护数字:
输出:
预期的:
我试图用precision()“截断”,但无济于事。有没有办法在不诉诸 epsilon 比较的情况下比较这两个数字?
c++ - C++:将“boost::multiprecision::float128”转换为“double”
我正在使用 boost 多精度库,更准确地说是 boost::multiprecision::float128 类型。使用 ICPC 进行编译时,我在尝试执行以下操作时遇到一些错误:
其中 functionA() 返回一个 boost::multiprecision::float128 变量。
我该如何解决这个问题?
boost - boost::multiprecision::cpp_int 的位数
获取 a 的位数的有效方法是boost::multiprecision::cpp_int
什么?该log10()
函数显然与多精度整数不兼容,我想不出任何其他方法来做到这一点。
c++ - 使用 Boost mpfr_float 创建可变精度的数学常数,例如 pi 或 e
我正在将 Boost.Multiprecision 用于 mpfr 后端的包装器,并且在将 pi(和 e 或任何其他数学常数)创建到我想要的精度时遇到了一些麻烦。我觉得我想做的事情应该是可能的,因为在Boost.Multiprecision的教程页面上使用了Boost.Math 作为常量。在本教程中,他们使用固定精度数的类型,例如——我想用 variable_precision 来做。查看以下代码:cpp_dec_float_50
mpfr_float
结果是一个数字 ,pi
它的精度为 1000,但只有约 165 位 pi,正如输出语句的结果所证明的那样,它确认 mypi
的精度为 1000,并打印大约 165 个正确数字,以及约 835零。这显然是错误的。
是否可以使用 boost::math::constants 中的常量填充高精度的 boost::multiprecision::mpfr_float?
请注意,我需要使用可变精度类型,并且不能选择其他高精度但固定精度的类型。我必须能够在运行时动态更改精度。
c++ - 增强 mpfr_float 的序列化
我想序列化一个包含 boost::multiprecision::mpfr_float 作为成员的自定义类。它在 Boost.Serialization 文档中说T
,如果 5 个属性中的至少一个为真,则类型是可序列化的,而在Multiprecision 文档中,number
该类具有传递支持,这需要底层后端可序列化。
对于 Boost.Multiprecision 的mpfr_float
类型,我知道:
- 它不是原始类型。
- 它是一个类类型,但它没有
serialize
定义函数。 - 它不是指向 Serializable 类型的指针。
- 它不是对 Serializable 类型的引用。
- 它不是 Serializable 类型的本机 C++ 数组。
因此,看起来如果我想序列化 mpfr_float 类型,我必须为该类型提供serialize
函数。
我的问题是:如何mpfr_float
通过自己编写serialize
函数将类型扩展为可序列化?我想我需要访问 mpfr 后端,并使用底层数据,但我不确定如何继续。来自有经验的人的提示 Boost 序列化以前未序列化的类将不胜感激。
结论性解决方案
根据 sehe 的回复,我得出了一个解决方案,该解决方案可以以 100 和 1000 的精度进行往返:
该方案解决了上述第(2)项的需要,即需要添加serialize
功能。谢谢您的帮助。
c - 扩展范围的浮点型
我需要在 C 中表示非常小阶的浮点数(例如 0.6745 × 2 -3000)。这种支持必须独立于平台(适用于 CPU 和 GPU-CUDA)。有效数字的大长度不是必需的。
我不能使用高精度库(GMP、MPFR 等),因为它们不能在 GPU 上运行。另一方面,CUDA 不支持该long double
类型。有什么解决办法吗?是否有可能以某种方式实现自定义浮点类型?
c++ - 编写 HugeInteger 类
我是 C++ 新手,这就是我应该为作业做的事情。
创建一个 HugeInteger 类,它使用一个 40 元素的数字数组来存储每个 40 位大的整数。提供成员函数输入、输出、加减。为了比较 HugeInteger 对象,提供函数 isEqualTo、isNotEqualTo、isGreaterThan、isLessThan、isCreaterThanOrEqualTo 和 isLessThanOrEqualTo - 这些函数中的每一个都是“谓词”函数,如果两个 HugeInteger 之间的关系成立,则返回 true,如果关系不成立,则返回 false。此外,提供的谓词函数是零。
加分建议:提供成员函数乘法、除法和取模。
我无法弄清楚如何比较课堂上的两个对象。
我的标头编码如下所示:
我的 .cpp 编码如下所示:
我的主要编程代码如下所示:
每次我运行我的程序时,它都会比较两个对象,无论如何它都会返回 true。我无法弄清楚我做错了什么或如何解决它。任何帮助是极大的赞赏!谢谢你!
mysql - MySQL中的精确十进制除法
如何正确划分DECIMAL
MySQL 中的两个值并获得精确到列类型中定义的位数的结果?
例子:
结果:
为什么第二个结果不准确?为什么第三个结果不是“0.5000”?
注意:我不能只使用第一种形式,我需要使用存储为小数的列进行计算。
c++ - 如何在 Boost::multiprecision 中使用 sqrt 和 ceil?
你知道如何使用 Boost::multiprecison 来完成这行简单的代码而不会出错吗?
使用 MSVC 时出现“sqrt”错误,可以通过以下方式修复它:
然后“ceil”出现错误,可以使用以下方法修复它:
然后出现“泛型相互转换”的错误!?!
我认为应该有更优雅的方式来实现这么简单的一行代码,不是吗?如果您对此有一些想法,请告诉我。
问候。
c++ - 使用 boost 多精度库的问题
我正在尝试编写一个基本转换程序,该程序适用于超出 C++ 长整数限制的数字。我正在尝试使用 boost 多精度库,但还没有走得很远。
我试图编译以下内容:
并收到以下错误:
main.cpp:32:18:错误:使用未声明的标识符“种子”std::cout <<种子;^ 产生 5 个错误。
我知道我一定犯了一些非常基本的错误,但我没有成功修复它们。任何帮助,将不胜感激。
我有一个简单的程序可以使用#include <boost/lambda/lambda.hpp>
,所以我相当确定 boost 安装正确。