问题标签 [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 投票
2 回答
1187 浏览

boost - 提升多精度 cpp_dec_float 仅与所需精度进行比较

我正在将 boost::multiprecision 库用于十进制浮点类型,并希望将两个浮点数与指定的精度进行比较。

但是, cpp_dec_float 似乎将数字与指定的精度进行比较,但还包括保护数字:

输出:

预期的:

见科利鲁

我试图用precision()“截断”,但无济于事。有没有办法在不诉诸 epsilon 比较的情况下比较这两个数字?

0 投票
1 回答
2821 浏览

c++ - C++:将“boost::multiprecision::float128”转换为“double”

我正在使用 boost 多精度库,更准确地说是 boost::multiprecision::float128 类型。使用 ICPC 进行编译时,我在尝试执行以下操作时遇到一些错误:

其中 functionA() 返回一个 boost::multiprecision::float128 变量。

我该如何解决这个问题?

0 投票
2 回答
808 浏览

boost - boost::multiprecision::cpp_int 的位数

获取 a 的位数的有效方法是boost::multiprecision::cpp_int什么?该log10()函数显然与多精度整数不兼容,我想不出任何其他方法来做到这一点。

0 投票
1 回答
460 浏览

c++ - 使用 Boost mpfr_float 创建可变精度的数学常数,例如 pi 或 e

我正在将 Boost.Multiprecision 用于 mpfr 后端的包装器,并且在将 pi(和 e 或任何其他数学常数)创建到我想要的精度时遇到了一些麻烦。我觉得我想做的事情应该是可能的,因为在Boost.Multiprecision的教程页面上使用了Boost.Math 作为常量。在本教程中,他们使用固定精度数的类型,例如——我想用 variable_precision 来做。查看以下代码:cpp_dec_float_50mpfr_float

结果是一个数字 ,pi它的精度为 1000,但只有约 165 位 pi,正如输出语句的结果所证明的那样,它确认 mypi的精度为 1000,并打印大约 165 个正确数字,以及约 835零。这显然是错误的。

是否可以使用 boost::math::constants 中的常量填充高精度的 boost::multiprecision::mpfr_float?

请注意,我需要使用可变精度类型,并且不能选择其他高精度但固定精度的类型。我必须能够在运行时动态更改精度。

0 投票
2 回答
480 浏览

c++ - 增强 mpfr_float 的序列化

我想序列化一个包含 boost::multiprecision::mpfr_float 作为成员的自定义类。它在 Boost.Serialization 文档中T,如果 5 个属性中的至少一个为真,则类型是可序列化的,而Multiprecision 文档中,number该类具有传递支持,这需要底层后端可序列化。

对于 Boost.Multiprecision 的mpfr_float类型,我知道:

  1. 它不是原始类型。
  2. 它是一个类类型,但它没有serialize定义函数。
  3. 它不是指向 Serializable 类型的指针。
  4. 它不是对 Serializable 类型的引用。
  5. 它不是 Serializable 类型的本机 C++ 数组。

因此,看起来如果我想序列化 mpfr_float 类型,我必须为该类型提供serialize函数。

我的问题是:如何mpfr_float通过自己编写serialize函数将类型扩展为可序列化?我想我需要访问 mpfr 后端,并使用底层数据,但我不确定如何继续。来自有经验的人的提示 Boost 序列化以前未序列化的类将不胜感激。


结论性解决方案

根据 sehe 的回复,我得出了一个解决方案,该解决方案可以以 100 和 1000 的精度进行往返:

该方案解决了上述第(2)项的需要,即需要添加serialize功能。谢谢您的帮助。

0 投票
3 回答
172 浏览

c - 扩展范围的浮点型

我需要在 C 中表示非常小阶的浮点数(例如 0.6745 × 2 -3000)。这种支持必须独立于平台(适用于 CPU 和 GPU-CUDA)。有效数字的大长度不是必需的。

我不能使用高精度库(GMP、MPFR 等),因为它们不能在 GPU 上运行。另一方面,CUDA 不支持该long double类型。有什么解决办法吗?是否有可能以某种方式实现自定义浮点类型?

0 投票
1 回答
7899 浏览

c++ - 编写 HugeInteger 类

我是 C++ 新手,这就是我应该为作业做的事情。

创建一个 HugeInteger 类,它使用一个 40 元素的数字数组来存储每个 40 位大的整数。提供成员函数输入、输出、加减。为了比较 HugeInteger 对象,提供函数 isEqualTo、isNotEqualTo、isGreaterThan、isLessThan、isCreaterThanOrEqualTo 和 isLessThanOrEqualTo - 这些函数中的每一个都是“谓词”函数,如果两个 HugeInteger 之间的关系成立,则返回 true,如果关系不成立,则返回 false。此外,提供的谓词函数是零。

加分建议:提供成员函数乘法、除法和取模。


我无法弄清楚如何比较课堂上的两个对象。

我的标头编码如下所示:

我的 .cpp 编码如下所示:

我的主要编程代码如下所示:

每次我运行我的程序时,它都会比较两个对象,无论如何它都会返回 true。我无法弄清楚我做错了什么或如何解决它。任何帮助是极大的赞赏!谢谢你!

0 投票
1 回答
9322 浏览

mysql - MySQL中的精确十进制除法

如何正确划分DECIMALMySQL 中的两个值并获得精确到列类型中定义的位数的结果?

例子:

结果:

为什么第二个结果不准确?为什么第三个结果不是“0.5000”?

注意:我不能只使用第一种形式,我需要使用存储为小数的列进行计算。

0 投票
1 回答
2907 浏览

c++ - 如何在 Boost::multiprecision 中使用 sqrt 和 ceil?

你知道如何使用 Boost::multiprecison 来完成这行简单的代码而不会出错吗?

使用 MSVC 时出现“sqrt”错误,可以通过以下方式修复它:

然后“ceil”出现错误,可以使用以下方法修复它:

然后出现“泛型相互转换”的错误!?!

我认为应该有更优雅的方式来实现这么简单的一行代码,不是吗?如果您对此有一些想法,请告诉我。

问候。

0 投票
2 回答
2510 浏览

c++ - 使用 boost 多精度库的问题

我正在尝试编写一个基本转换程序,该程序适用于超出 C++ 长整数限制的数字。我正在尝试使用 boost 多精度库,但还没有走得很远。

我试图编译以下内容:

并收到以下错误:

main.cpp:32:18:错误:使用未声明的标识符“种子”std::cout <<种子;^ 产生 5 个错误。

我知道我一定犯了一些非常基本的错误,但我没有成功修复它们。任何帮助,将不胜感激。

我有一个简单的程序可以使用#include <boost/lambda/lambda.hpp>,所以我相当确定 boost 安装正确。