问题标签 [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 - Haskell FFI / C MPFR 库包装问题
为了创建任意精度的浮点数/替换 Double,我尝试使用 FFI 包装MPFR,但尽管我付出了所有努力,但最简单的代码仍然不起作用。它编译,它运行,但在假装工作一段时间后它会模拟地崩溃。一个简单的 C 版本代码可以愉快地将数字“1”打印到(小数点后 640 位)总共 10,000 次。Haskell 版本,当被要求做同样的事情时,在“1.0000...0000”的 289 次打印输出和 385 次打印输出后默默地破坏(?)数据,它导致断言失败和炸弹。我不知道如何继续调试它,因为它“应该工作”。
该代码可以在http://hpaste.org/10923阅读并在http://www.updike.org/mpfr-broken.tar.gz下载
我在 FreeBSD 6 上使用 GHC 6.83,在 Mac OS X 上使用 GHC 6.8.2。请注意,您需要为库和头文件(以及那些从 GMP) 来成功编译它。
问题
为什么 C 版本可以工作,而 Haskell 版本却失败了?接近 FFI 时我还缺少什么?我尝试了 StablePtrs 并得到了完全相同的结果。
其他人可以通过编译和运行我的代码来验证这是否只是 Mac/BSD 的问题吗?(C 代码“有效”吗?Haskell 代码“无效”有效吗?)Linux 和 Windows 上的任何人都可以尝试编译/运行并查看是否得到相同的结果吗?
C代码:(works.c)
Haskell 代码:(Main.hs --- 不起作用)
c++ - 用 Visual Studio 构建 GMP 库?
有没有一种简单的方法可以在 Windows 下使用 Visual Studio 2005构建 GMP(GNU 多精度算术库, http ://gmplib.org)?我试图找到有关自己建立图书馆的信息,但找不到任何真正帮助我的东西。我自己对构建库不是很有经验(我已经设法构建了 boost,但仅此而已)。
或者是否有我不知道的稳定(预建)GMP 发行版?
MPIR 是一个有效的替代方案(http://www.mpir.org)吗?GMP 站点上关于 MPIR 的评论:对于某些 Windows 用户来说,这种“愤怒的 GMP 分支”可能是真正 GMP 的替代品,但他们必须处理大量反 GMP 情绪。
编辑: MPFR C++ 包装页面包含 Visual Studio 的 GMP/MPFR 解决方案的信息/链接以及编译的 gmp/mpfr 库:http: //www.holoborodko.com/pavel/mpfr/
c++ - 平台无关的数学库
是否有一个公开可用的库可以为 sin、cos、floor、ceil、exp 和登录 32 位和 64 位 linux、solaris 以及可能的其他平台产生完全相同的结果?
我正在考虑以下替代方案:
a)在每个平台上编译的cephesgcc -mfpmath=sse
和相同的优化级别......但不清楚这是否可行。
b) MPFR,但我担心这会太慢。
关于精度(已编辑):对于这个特定的应用程序,我真的不需要产生在数值上最接近精确值的值的东西。我只需要在所有平台、操作系统和“位”上的答案都完全相同。话虽如此,这些值需要合理(5 位数可能就足够了)。对于在我最初的问题中没有明确说明这一点,我深表歉意。
我想具有足够低精度设置的 MAPM 或 MPFR 可能会解决问题,但我希望找到一些没有“多精度”机械/风味的东西。无论如何,我会试试这个。
math - MPFR 舍入问题
我刚刚开始使用 MPFR 任意精度库,很快就会遇到非常奇怪的行为。使用它的主要目标是提高大参数“触发”的精度,这在 MPFR 中非常有效。
但后来我决定检查简单的数学,这令人难以置信——即使在具有严格答案的简单示例中也存在舍入错误,并且不依赖于使用的精度。
即使在像 1.1 * 1 这样的示例中,结果也是 1.10000000000000008881784...而且这个结果以疯狂的 2000 位精度(正常双精度为 53)给出!
可能是我的系统问题,但在线MPFR也存在类似问题。您可以在线尝试这样的示例:http: //ex-cs.sist.ac.jp/~tkouya/try_mpfr.html
1 * 1.1 @ 64 位 = 1.10000000000000000002
但是在线版本会随着精度的提高而进一步移动错误,但在我的安装中 - 没有。
我的系统:Ubuntu 9.10 + gmp 5.0.0.1 + mpfr 2.4.2
c - MPFR 将 0.9999 舍入为 1?
我正在尝试使用 mpfr_set_str() 函数将值 0.9999 存储到 mpfr_t 变量中
但 0.9999 在存储期间被舍入为 1(或其他值!= 0.9999),无论舍入值如何(GMP_RNDD、GMP_RNDU、GMP_RNDN、GMP_RNDZ)
那么使用 mpfr_set_str() 将 0.9999 存储在 mpfr_t 变量中的最佳方法是什么?是否可以?
这是我的测试程序,它打印“缓冲区为:1”,而不是想要的“缓冲区为:0.9999”:
谢谢您的帮助
configuration - GCC 找不到 GMP、MPFR 和 MPC 库
我正在尝试在 Mac OS 10.5.7 上交叉编译 GCC。我在安装 GMP、MPFR 和 MPC 后使用此命令配置 GCC:
我收到了这个错误:
为什么 GCC 可以找到 GMP、MPFR 和 MPC 的标头,但找不到库?
c++ - 将 mpfr_t(或任何其他任意精度库类型)转换为 __float128
我想我真的有两个问题。
1) 我想知道是否有人知道在 GCC 中将 mpfr_t 类型转换为 __float128 类型的方法。我环顾四周,在 mpfr bugfixes 网站上找到了一个帖子,其中有人讨论了他们尝试编写一个从 __float128 到 mpfr_t 的转换器,但它似乎在去年的某个时候下降了。
2) 如果没有人知道将 mpfr_t 转换为 __float128 的方法,有没有人知道另一个任意精度的 C/C++ 库可以?
谢谢
c - mpfr_t 的类型是什么,如何制作这种类型的 C 函数?
我刚刚开始使用 GMP 和 MPFR。我正在用 C 语言编写一个程序,并希望创建一个函数,该函数(例如)将 mpfr_t 变量作为输入并返回一个 mpfr_t 变量。我不确定 mpfr_t 的定义,但我天真地尝试这样做并得到编译错误。
任何有关此的信息将不胜感激。
gcc - 让 MPFR 在 cygwin 上构建
我花了一整天的时间来设置 GCC
http://cygwin.wikia.com/wiki/How_to_install_GCC_4.3.0
在 gcc make 步骤中,它告诉我无论出于何种原因它都需要一个 c++ 编译器来继续,所以我以通常的方式更新了 Cygwin 并获得了 gcc-c++。
之后,cgywin 帮我删除了我之前安装的 3 个 prereq 库,
所以我开始重新制作它们。GMP 工作正常,然后我进入 MPFR。无论出于何种原因,MPFR 都会引发此错误:
资源在这里提到了这个错误。
我很确定它可以找到 GMP,因为 cygcheck 显示它没有问题,配置甚至提到它找到了它。
当我尝试:
它抛出:
到目前为止,尽管谷歌搜索并尝试了几个小时,但我仍然无法让 MPFR 正常工作。
MPC 也无法以通常的方式找到 GMP。
我还尝试将库交给子目录中的 GCC 并让它编译它们。
当我尝试这样做时,它会进入 make 步骤,然后抛出stage1-bubble
错误并失败。没有错误或任何内容的描述。
我不知道还能尝试什么。
gcc - 编译旧版本的 gcc
我正在尝试在 CentOS 5.5 操作系统上使用 gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-50) 编译 gcc 版本 gcc4.3.2。最初编译器抱怨需要 gmp 和 mpfr 库,然后成功下载、编译和安装。
安装后,使用的新配置命令是:
../gcc4.3.2/gcc-4.3.2/configure --prefix=/home/shahw/gccdir/ --with-gmp=/usr/local/ --with-mpfr=/usr/local/
我现在遇到以下错误:
config.log 最后包含以下内容:
任何对潜在解决方案的提示将不胜感激。