问题标签 [long-double]
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++ - C++中long double的精度是多少?
有谁知道如何找出long double
特定平台上的精度?我似乎在 17 位十进制数字后失去了精度,这与我刚使用double
. 我希望得到更多,因为double
在我的平台上用 8 个字节表示,而用long double
12 个字节表示。
在你问之前,这是针对欧拉计划的,所以是的,我确实需要超过 17 位数字。:)
编辑:感谢您的快速回复。我刚刚确认在我的系统上使用只能获得 18 位十进制数字long double
。
floating-point - 80 位扩展精度数据类型的应用/好处是什么?
是的,我的意思是说80-bit。那不是笔误...
我在浮点变量方面的经验总是涉及 4 字节的倍数,比如单数(32 位)、双数(64 位)和长双数(我曾见过它被称为 96 位或 128 位)。这就是为什么当我在编写一些代码以读取和写入AIFF(音频交换文件格式)文件时遇到80 位扩展精度数据类型时有点困惑:选择了扩展精度变量来存储采样音轨的速率。
当我浏览 Wikipedia 时,我发现上面的链接以及IEEE 754-1985 标准摘要中的 80 位格式的简要说明(但不在IEEE 754-2008 标准摘要中)。似乎在某些架构上“扩展”和“长双”是同义词。
我没有遇到的一件事是使用扩展精度数据类型的特定应用程序(当然,AIFF 文件采样率除外)。这让我想知道:
- 有没有人遇到过扩展精度对于某些编程应用程序是必要/有益的情况?
- 80 位浮点数的好处是什么,除了明显的“它比 double 精度高一点,但比 long double 的大多数实现少字节”?
- 它的适用性正在减弱吗?
c++ - long double 输出的精度不正确。可能有什么问题?
我有一个long double
常量,我将其设置为 const 或非 const。它比long double
我的测试工作站上的精度(19 位)长(40 位)。
当我打印出来时,它不再以 19 位精度显示,而是以 16 位显示。
这是我正在测试的代码:
编译:
输出:
我会期待0.6931471805599453094
,而是得到0.6931471805599452862
.
19位精度被削减到16位是有原因的吗?
这是我的环境:
我在其他版本的 gcc 上看到了同样的问题,例如:
我可以查看 NTL 或其他库,但我很好奇是什么原因造成的。感谢您的洞察力。
c - C中的长双
我一直在阅读C Primer Plus书并找到了这个例子
在我的 macbook 上运行此程序后,我对输出感到非常震惊:
所以我环顾四周,发现显示 long double 的正确格式是使用%Lf
. 但是我仍然不明白为什么我得到了 doubleabet
值而不是我在Cygwin、Ubuntu和iDeneb上运行它时得到的值,这大致是
有任何想法吗?
c++ - 实际长双精度与 std::numeric_limits 不一致
使用 i686-apple-darwin10-g++-4.2.1 在 Mac OS X 10.6.2、Intel 上工作,并使用 -arch x86_64 标志进行编译,我只是注意到虽然......
...正如预期的那样,当 long double 实际上设置为指数大于 308 的值时,它变为 inf——即实际上它只有 64 位精度而不是 80 位。
此外,sizeof()
显示长双精度为 16 个字节,它们应该是。
最后, using<limits.h>
给出与 相同的结果<limits>
。
有谁知道差异可能在哪里?
给
4932
1e+308 inf
16
file - 二进制文件打印和所需精度
我正在打印一个变量 z1,它是一个包含浮点数的一维数组到一个文本文件,以便我可以导入 Matlab 或 GNPlot 进行绘图。我听说二进制文件 (.dat) 比 .txt 文件小。我目前用于打印到 .txt 文件的定义是:
我有三个问题:
二进制文件真的比文本文件更紧凑吗?
如果是,我想知道如何修改上面的代码,以便我可以将数组 z1 的值打印到二进制文件中。我读过 fprintf 必须用 fwrite 替换。我的输出文件说 dodo.dat 应该包含数组 z1 的值,每行一个浮点数。
我的代码中有 %.16Le,但我认为 %.15Le 是正确的,因为我有 15 个长双精度数字。我在宽度位置放了一个点 (.),因为我相信这允许扩展到任意字段以保存所需的数字。我对吗?作为 %.16Le 的示例,我可以得到像 1.0047914240730432e-002 这样的输出,它给了我 16 个精度数字,并且字段的宽度具有正确的宽度以正确显示数字。在宽度位置而不是宽度值中放置一个点 (.) 是一种好习惯吗?
非常感谢...
更新正在更改为:
除了更改为“wb+”还可以吗?我无法在 Matlab 中读取二进制文件。
c++ - x86-64 long 双精度
Intel 64 位平台上 long double 的实际精度是多少?是 80 位填充到 128 还是实际 128 位?
如果是前者,除了 gmp 之外,还有其他选择可以达到真正的 128 精度吗?
visual-c++ - 在 MSVC 中将扩展精度浮点数(80 位)转换为双精度(64 位)
在 MSVC win32/win64 中从扩展精度浮点数(80 位值,在某些编译器中也称为long double
)到双精度(64 位)转换的最便携和“正确”的方法是什么?
MSVC 目前(截至 2010 年)假定这long double
是double
同义词。
我可能可以在内联 asm 中编写fld
/fstp
汇编程序对,但内联 asm 不适用于 MSVC 中的 win64 代码。我是否需要将此汇编代码移动到单独的 .asm 文件中?难道真的没有好的解决办法吗?
c++ - 长双 vs 双
我知道各种数据类型的大小可以根据我所在的系统而改变。
我使用 XP 32 位,并使用sizeof()
C++ 中的运算符,看起来long double
是 12 字节,double
是 8。
但是,大多数主要来源都指出它long double
是 8 个字节,因此范围与 a 相同double
。
我怎么有 12 个字节?如果long double
确实是12个字节,这不是也扩展了值的范围吗?或者长签名仅在值超出双精度范围时才使用(编译器数字),因此超出 8 个字节?
c - printf 和 long double
我在 Windows 上使用最新的 gcc 和 Netbeans。为什么不起作用long double
?说明printf
符%lf
错了吗?
代码:
输出: