问题标签 [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.

0 投票
1 回答
2160 浏览

c++ - 在 VS2010 中编译带有长双精度的 Windows C++ 应用程序

在工作中,我们有 MSVS2010 Ultimate,我正在编写一个使用实数运行详尽模拟的程序。我遇到了不小的舍入错误,我已经采取了合理的步骤来确保我的算法在数值上尽可能稳定。

我想切换到 128 位四倍精度浮点数(long double,对吗?),看看它有多大的不同。

我已经替换了doublewith的所有相关实例long double,重新编译并再次运行了我的虚拟模拟,但结果与以前完全相同。

根据我在 C/C++ 中的项目属性页,这些是我的(调试)编译器选项:

/ZI /nologo /W3 /WX- /Od /Oy- /D "_MBCS" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\FFTU.pch" /Fa "Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue

我的开发 CPU 是 Core2 Duo T7300,但目标机器是 i7。两种安装都是 Windows 7 64 位。

0 投票
1 回答
837 浏览

c++ - 输出精度高于双精度

我正在打印来自 C++ 程序的一些数据,以由 ParaView 处理/可视化,但我遇到了浮点数问题。Paraview 支持 Float32 和 Float64 数据类型。Float64 相当于 double ,典型限制为 +/-1.7e +/- 308。但是,我的代码正在打印 6.5e-318 之类的数字。这会在读取数据时在 ParaView 中引发错误。我已经验证将这些小数四舍五入为零会使 ParaView 中的错误消失。我不确定为什么我有这样的“高精度”输出,可能是因为某些数字的存储精度比双精度高。例如,以下代码在我的系统上重现了相同的行为:

我的输出是:

我的系统是 Mac OS X Snow Leopard,我用 GCC 4.2和GCC 4.6 测试了上面的 flags-m32和(不确定这是否有用)。-m64-ffloat-store

实际上对我来说输出很好,但对 ParaView 来说不是。我只是想知道为什么我有这种差异。我很可能会忽略与浮点数相关的一些可能很重要的东西。您能否给我一些关于双打的输出/数值行为的线索?

0 投票
1 回答
260 浏览

c++ - 精度 long double 比 double 差

当我使用时,long double我得到的精度比使用double. 3.14159265358979323846264Llong double const在源代码中编写好还是我应该添加其他内容L

编辑我解决了这个问题。我将算法更改为更精确。

0 投票
2 回答
4902 浏览

c++ - 为什么在我的 64 位机器上 double 和 long double 完全一样?

这个问题听起来像是初学者的问题,但是当我发现我认为我要么是初学者,要么我的比赛缺少一些东西时:

节目输出:

8

8

15

15

我以为long double是 10 个字节,有 18 个十进制数字,而double8 个字节,有 15 个数字,但似乎我错了。

为什么呢?

在 64 位机器上使用 MSVC 2010。

0 投票
3 回答
1398 浏览

c - 整数常量对于它的类型来说太大了,并且对于二元运算符来说无效的操作数

double long在我的 64 位计算机中使用并且sizeof(double long)16 bytes. 所以我做了以下任务:

我得到这个警告:warning: integer constant is too large for its type。该警告似乎不正确,我的常量可以轻松保存为 128 位值。那么,为什么我会收到警告?

我也有这个代码:

我收到以下错误error: invalid operands to binary &。为什么 ?

0 投票
3 回答
2731 浏览

c++ - 双精度:大数的乘法

我有一些大数字(整数)的简单运算(减法,乘法)。它们太大了,我必须将它们存储到long double变量中。这很好,但在某些情况下,乘法会失去精度。

例子:

很明显,这是错误的。乘法的结果应该以零序列结束。

我需要保持精度,尤其是这个(当数字以零结尾时),因为这是最常见的情况。

我的问题是,请问该怎么做?有什么办法可以强迫long double自己表现得更好吗?或者有什么选择如何获得存储数字的精度?

非常感谢!

编辑:

我不能使用任何外部库。我正在尝试解决 ACM 竞赛存档的一个问题。这是其中的一部分。

我会很好地失去精度,但我必须检测到它。当数字大于long double它很可能(也许可以肯定)时,它以长的零序列结束。

0 投票
2 回答
1146 浏览

math - long double 在 ANSI C 中有用吗?

C89 (ANSI C) 标准中有一种数据类型称为long double,但没有任何数学函数支持long double( <math.h>)。例如,sin函数接受一个long参数。

C99 支持long double.

long double我的问题是,当ANSI C 中没有任何数学函数支持时,long double有用吗?

0 投票
1 回答
3255 浏览

c - 为什么这个 long double 不能使用 printf 正确打印出来?

我需要使用 long double 进行除法,大约为 1/10^23,但是当我使用 printf 检查它们时,数字会被截断。有谁知道我怎样才能看到完整的号码?例如:

但我得到:

例如,我想在这里显示完整的数字

0 投票
3 回答
2396 浏览

performance - long double 的性能影响。为什么C默认选择64位而不是硬件的80位?

具体来说,我说的是 x87 PC 架构和 C 编译器。

我正在编写自己的解释器,double数据类型背后的推理让我感到困惑。尤其是在效率方面。有人可以解释为什么 C 决定使用 64 位double而不是硬件原生 80 位double吗?为什么硬件设置为 80-bit double,因为它没有对齐?每个的性能影响是什么?我想double为我的默认数字类型使用 80 位。但是编译器开发人员的选择让我担心这不是最佳选择。

  1. double在 x86 上只短了 2 个字节,为什么编译器long double默认不使用 10 个字节?
  2. 我可以举一个 80-bit long doublevs获得的额外精度的例子double吗?
  3. 为什么微软long double 默认禁用?
  4. long double就数量级而言,典型的 x86/x64 PC 硬件会差多少/慢多少?
0 投票
2 回答
731 浏览

c++ - 在 C++ 中添加长双打给出了错误的答案

我有一段代码如下:

val1 和 val2 都是 long double。

问题来自这样一个事实,即结果是:

这没有任何意义。看来 val2 没有被添加到 val1,但是,显然有足够的信息可以添加到它的小数val1部分val2

我被难住了,有人有什么想法吗?

我相信我正在使用 GCC 4.2。G++ 是否使用 IEEE 四精度格式?或者其他的东西(比如 80 位扩展精度,它可以解释这个问题(尽管为什么会出现超过 18 个小数位呢?)。