问题标签 [quadruple-precision]

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 回答
616 浏览

fortran - 四倍与双精度的 CPU 时间

我正在做一些长期模拟,试图在 ODE 系统的解决方案中实现尽可能高的精度。我试图找出四倍(128 位)精度计算与双倍(64 位)精度相比需要多少时间。我在谷歌上搜索了一下,看到了一些关于它的意见:有人说需要 4 倍的时间,其他人说需要 60-70 倍......所以我决定自己动手,我写了一个简单的 Fortran 基准程序:

使用 编译后的典型运行结果gfortran 4.8.4,没有任何优化标志:

这里一定发生了什么事。我的猜测是,它sqrtgfortran通过优化算法计算的,而四倍精度计算可能还没有实现。和可能不是这种情况sincos但是为什么基本运算在四倍精度上慢了 7.6 倍,而对于三角函数,速度只慢了 2 倍?如果用于三角函数的算法对于四精度和双精度是相同的,我希望它们的 CPU 时间也会增加七倍。

与 64 位相比,使用 128 位精度时科学计算的平均速度下降多少?

我在 Intel i7-4771 @ 3.50GHz 上运行它。

0 投票
1 回答
711 浏览

c++ - Linux 与 Mac 上的四倍精度

我编写了一个多维数值积分代码,它能够在 Linux 中以双精度、长双精度或四倍精度运行。所有模式都可以完美地编译和工作,但是当我尝试在 Mac 上为四倍精度案例编译相同的代码时,我最终会遇到错误,我不确定它们的含义。

我正在用 g++ 编译,但我尝试了其他编译​​器(我确实尝试过 clang 只是为了看看它会做什么,但据我所知,它不能支持四倍精度?如果我错了,请纠正我)。

我链接了相关的库和头文件(包括 quadmath.h 头文件),我最终得到了来自 quadmath.h 的这些错误:

__float128 错误也会重新出现在各种数学运算中,例如 acosq、asinq 等...

我以前从未遇到过不受支持的机器模式错误。我看过 GNU 编译器说明GNU 编译器说明GNU 浮动类型

很难为人们编译和测试制作一个最小的工作示例,所以我只是试图跟踪错误以找出问题所在,但我不确定现阶段该做什么。鉴于这些错误消息,下一步将是什么?关于 Linux 与 Mac,我有什么遗漏吗?我一直在 Linux 中编码,所以对后者不熟悉,而且似乎在 Mac 上进行四倍精度计算的方法与我习惯的方法不同。

谢谢您的帮助

-雪人

0 投票
1 回答
1021 浏览

floating-point - 运行 64 位计算机的 128 位 Fortran 计算

我有一个 64 位的 linux 系统。我使用 gfortran 编译并运行我的 Fortran 代码,这会将一些数字输出为双精度,即 ~ 16 位小数。例如

如果我现在使用标志-fdefault-real-8进行编译,则 Fortran 双精度类型将提升为 16 字节 = 128 位并输出一些数字,但精度更高 ~ 33 位小数。例如

我的问题是:如果我的计算机只有 64 位,这个计算怎么能做到如此高精度?

0 投票
0 回答
78 浏览

windows - 使用 Mingw(Anaconda 版本)在 Fortran 中使用四倍精度的奇怪行为

  • 视窗 7 64 位
  • GNU Fortran (GCC) 4.7.0 20111220 (experimental) --> 使用 Anaconda3/Miniconda3 64 位安装的 MinGW 版本。

大家好,

我正在尝试编译一些 Fortran 代码,以便使用 F2Py 从 Python 中使用。完整的项目是Solcore,以防有人感兴趣。在 Linux 和 MacOS 中一切正常,问题出现在 Windows 上。经过一番努力,我将问题归结为我的 Fortran 代码的四倍精度变量,这些变量没有得到正确处理。

一个在 Linux/MacOS 中运行良好但在 Windows 中运行良好但在 Windows 中运行良好的最小示例是:

在 Linux/MacOS 中,这会按预期打印:

但是,在 Windows 中,我得到:

撇开科学记数法不谈,显然这不是我所期望的。每当我尝试使用四倍精度变量进行操作时,都会出现相同的结果,但我无法找到方法。

这与 Fortran 中的四倍精度变量和 Anaconda 中包含的 MinGW 版本已经指出的错误不同。

任何建议都将受到欢迎。请记住,最终我需要使用 F2Py 来完成这项工作,而 Anaconda 中包含的 MinGW 是我在阅读了许多说明和教程后最终找到使其工作的唯一方法。因此,如果可能的话,我宁愿坚持下去。

非常感谢,

迭戈

0 投票
0 回答
453 浏览

c++ - Intel C++ 编译器 18.0 update 3 in vs 2017 上的四倍精度浮点支持

我只是尝试boost::multiprecision::float128使用英特尔 C++ 编译器 18.0 更新 3 在 Visual Studio 2017 中编译支持的 C++ 程序。

/Qoption,cpp,--extended_float_type向项目 C/C++ 添加了附加选项。

但是,ICC 会发出E0020: identifier "_Quad" is undefined错误消息。

我搜索了与四倍精度浮点数和 _Quad 主题相关的最新 ICC 18 开发人员指南和参考,但找不到任何内容。

ICC 18 中是否_Quad仍支持关键字,或者我在编译器选项中犯了错误?谢谢。

  • 操作系统:Windows 10 x64 1803
  • 视觉工作室 2017 15.7.3
  • 英特尔 C++ 编译器 18.0 更新 3
0 投票
0 回答
173 浏览

fortran - FFTW3 无法识别四倍精度的 MPICH 库?

我正在将涉及调用 FFTW3 和 BLAS-LAPACK 包的并行双精度 fortran 代码转换为并行四倍精度。

我已经为四倍精度安装了 FFTW3,如下所示:

描述于: http: //fftw.org/fftw3_doc/Installation-on-Unix.html#Installation-on-Unix

调用这些库的示例串行代码可以正常工作。我在这里链接到 lquadmath,它告诉我串行编译器 gfortran 有那个库。

但是,要使用并行库安装 FFTW3 需要另一个标签

当我尝试这个时出现错误:

以下是我的 mpich-3.2.1 安装脚本:

我尝试了使用 REAL16 数据类型(https://www.mpi-forum.org/docs/mpi-2.1/mpi21-report-bw/node330.htm)的 mpigather 和 mpiscatter 测试来分散 pi 的倍数,它工作正常。

但是,FFTW3 无法识别这一点。我该如何进行?感谢您的时间。

0 投票
1 回答
418 浏览

c++ - 四倍精度 (gcc) 的 Epsilon

根据维基百科,不同精度数据类型的布局是

我写了一个小程序来输出 C++ 中floatdoublelong double的数值限制(用 g++ 编译)

哪些输出(我已经在多台机器上运行它,结果相同)

上限与 2^(2^(e-1)) 一致,对于floatdouble,epsilon 与 2^(-f) 一致。但是对于long double,按照这种逻辑, epsilon 应该大约是 1.9259e-34 。

有谁知道,为什么不是?

0 投票
2 回答
187 浏览

c - 使用英特尔编译器 (icc) 的四精度数字

我一直在尝试使用英特尔的四精度浮点数。我有以下代码,它返回意外结果。

该程序返回以下结果:

看起来四精度文字被正确解释了。但是,函数logqlog10qcosq和正在返回不正确的结果。sinqsqrtq

我找到的关于英特尔_Quad类型的唯一方向是这里

我在 MacOS 上编译这段代码:

我是否正确使用了四精度数学函数?

另外,我尝试使用本文中描述的函数模式

libm 函数的四倍精度类似物具有 '__' 前缀(双下划线)和 'q' 后缀。”

但是,这会导致NaN所有函数都返回。

0 投票
0 回答
77 浏览

c - 在 c 程序中将默认的实类型设置为 16 字节

使用 gfortran 编译器,标志 -fdefault-real-16 有助于将默认实类型设置为 16 字节宽的类型。例如

何时遵守

结果看起来像

当编译为

结果看起来像

所以,我尝试对 c 程序做同样的事情

问题是:即使c程序编译时带有-m64标志,例如

它给出了相同的结果

问题是:是否有一些方法可以告诉 gcc 将“double”编译为“long double”?

0 投票
2 回答
388 浏览

matlab - MATLAB中的双精度和四精度

我想将数据(双精度,15 个小数点)转换为另一种类型的数据(四精度,34 个小数点)。所以,我使用vpa了这样的功能:

但是,结果的类型是sym, not double。当我检查sym类型数据的每个单元格时,1x1 sym在每个单元格中都创建了。我尝试fft使用 'quad_data' 来使用函数,但它不起作用。有什么解决方案可以将双精度类型的小数点从 15 更改为 34?