问题标签 [mpfr]
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++ - 增强 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
功能。谢谢您的帮助。
gcc - 与 OS X 10.10.2 的“__mpf_struct”相关的未定义符号错误
我正在尝试从
https://github.com/davidsd/sdpb
在 OS X 10.10.2 上使用 gcc-4.9、boost 1.57.0、gmp-6.0.0a 和 mpfr-3.1.2,但我不断收到似乎与 gmp 和 mpfr 软件包相关的错误。我知道有人在 10.9.5 上成功编译。有人可以建议修复吗?
架构 x86_64 的未定义符号:“operator<<(std::basic_ostream >&, __mpf_struct const*)”,引用自:
“operator>>(std::basic_istream >&, __mpf_struct*)”,引用自:
ld:未找到架构 x86_64 collect2 的符号:错误:ld 返回 1 退出状态 make:*** [sdpb] 错误 1
c - arbitrary floating precision number to string
I am new to c programming language. What I am trying to do is to get store pi in arbitary precision and turn that to string.
Here is mpfr lib documentation documentation http://www.mpfr.org/mpfr-current/mpfr.html#Miscellaneous-Functions
c++ - 使用 boost multiprecision/mpfr float - 字符串不能被解释为有效的整数错误
我编写了一个程序,它执行一些非常大的简单算术运算。我成功地使用了 boost 多精度库中的 mpz_int 和 mpf_float,但发现我需要更高的精度来实现我的目的。我一直在尝试使用 mpfr 库来定义更精确的浮点数。我能够编译我的代码,但现在收到运行时错误 libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl >: The string “1572…[4000 digits]…00.328” can不被解释为一个有效的整数。
我有一种感觉,这是我尝试将我创建的 mpfr_float 转换为导致问题的整数。我从一个整数字符串初始化浮点数,并在尝试向下舍入并转换为整数之前进行一些除法。这是我的类型定义:
我的声明:
和我尝试的转换:
如果有人可以帮助我完成此转换并避免运行时错误,我将不胜感激。我认为尽管我的困惑的根源可能比这更深,所以我想解释一下我的项目,看看是否有人能告诉我,我正在做的事情是否从根本上是错误的。
我正在尝试创建看起来随机但由可预测的伪随机函数构成的文本页面。因此,如果有人输入 1,然后是 2,然后是 3,他们会注意到三页文本之间没有任何模式,但是输入任何这些数字每次都会给出相同的文本。我正在尝试创建 29 个字符的页面的所有可能性 3200 次,或 29^3200 个可能性(大约 10^4680)。
我正在使用暂停序列来生成伪随机质量,并将结果乘以 29^3200。
这是我的暂停序列:
然后,我从结果数字到 base-29 进行基本转换,以获得一页文本。最初我将 mpz_int 用于 29^3200(从字符串初始化) - 但我发现这会产生重复模式。取决于halton序列的分母是什么。例如,产生分母 243 的输入将产生一页文本,其中相同的 162 个字符从 3200 个字符重复,只是在不同的位置。
这是我的程序的基本转换部分:
我对数学的理解不够好,无法理解为什么会发生这种重复,但凭直觉我改成了浮点数。我发现这样做要好得多 - 模式要短得多,并且只会开始出现在输出字符串的开头(代表更高的值),但最终它们仍然存在并且可以识别。我发现 mpf_float 比 mpf_float_1000 工作得更好,而且在产生更多看似随机的结果方面,它们都比 mpz_int 好得多。
正如我之前提到的,我的表面问题很简单:我如何避免这个运行时错误?但我更关心的是:a)为什么会出现这些模式?我是否正确,精度更高的浮点数会消除这些重复的字符串?b) 如果是这样,mpfr_float 是最好的数据类型吗?我应该给它什么程度的精确度?c) 如果不是,我应该使用什么数据类型?
我非常感谢任何可以回答这些问题的人。
- -编辑 - -
我解决了我遇到的问题,方法是坚持使用 mpf_float,使用 29^3280 作为种子,并切断最后 80 个重复的字符。不过,我仍然对固定精度和可变精度感到好奇。当我试图用更高的模板参数定义一个固定精度的 gmp_float 时,我得到了更糟糕的结果。究竟什么是固定精度和可变精度,为什么会产生这样的结果?
r - 如何使用 R 中的 mpfr 包检查一个数字是否是一个完美的正方形?
我有一个行列式,我知道它是整数的平方,但是因为它的值比.Machine$integer.max
我使用的 mpfr 包大。
但我仍然有问题。
这是算法:
请你帮助我好吗?
ios - 使用 iOS SDK 8.3 构建 MPFR 的问题
我在为 iOS、armv7s 架构构建 MPFR 时遇到问题。我在成功构建 GMP 后使用此命令,
但是,我配置给了我错误
未找到 libgmp 或使用了不同的 ABI。
我用与上面相同的配置设置构建了 GMP,然后 make、make install 等。之后,我将 gmp.h 文件和 libgmp.la 文件复制到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/
和
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/lib
分别,但我得到同样的错误。
有任何想法吗?
c++ - 用于高精度浮点数的 C++ 类型
我们在数据类型方面遇到了严重问题。我对 c++ 中的数据类型有很大的问题。我必须处理 100 位数字。我一直在尝试使用 mpfr real,但编译器总是崩溃。
这只是某种评价。系统找不到 mpfr 的声明 /"mpfr is not a type" 安装了库。
错误信息:
真实的.hpp:
与另一个示例中的结构相同,但现在有另一个声明和更多错误:
你有什么建议可以使用哪种类型来处理这样和更长的数字吗?我为 mpfr 找到了几个,但总是遇到同样的问题。
cmake - 使用 cmake 编译时链接库出现问题
我可以使用以下命令用 g++ 编译 cpp 文件:
如何将这些库添加到 CMakeLists.txt 以使用 CMake 进行编译?
c - 高精度 MPFR 程序崩溃
我最近写了一个程序来计算 pi 到指定的位数。位数必须作为第一个命令行参数传递。
当以大约 300 以下的数字值运行时,它工作得很好。但是,当使用较大的数字值运行时,它会崩溃并出现以下异常。
我相信这是由于 MPFR 库中的最大精度,但是,我不明白如何更改该最大值或解决它。
这是我的代码 pic.c
我使用 gcc 和以下命令编译程序: