问题标签 [double-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 投票
6 回答
633 浏览

c++ - 处理线性代数的最佳基类型

我正在为一个项目用 C++ 编写一个小型且不足的线性代数库(对不起)。我正在使用双精度数字实现矩阵和运算。我做得对吗?我应该实现一个模板类吗?周围有更精确的类型吗?

0 投票
1 回答
3860 浏览

floating-point - Fortran 实数表达式中的后缀“d+0”

有谁知道后缀“ d+0 ”在下面 M1、M2 和 M4 的作业中是什么意思,或者在网络或书籍上有什么资源很可能找到这些信息吗?


0 投票
11 回答
103361 浏览

c++ - 我应该使用双精度还是浮点数?

在 C++ 中使用一个而不是另一个的优点和缺点是什么?

0 投票
8 回答
8822 浏览

c++ - 与 float 和 float 文字相比的奇怪输出

为什么是输出not equal

为什么会这样?

0 投票
6 回答
852 浏览

java - 在 Java 中使用 BigDecimal 而不是 double 所带来的权衡

我正在为神经网络编写代码,我想知道是否应该这样做。我实际上有点担心,即使使用 double 也可能不会产生好的结果,并且我可能不得不将我的代码迁移到更高效的语言,比如 c++。我在这里读到一个问题,BigDecimal 比 double 慢 1000 倍?好多啊。

另一方面,我将大量使用十进制数字,让它更精确总是好的。我也无法确定精度是否会导致问题。我不认为我见过的任何实现都可以做到这一点,所以我可能不会这样做。尽管有时网络并没有表现出应有的行为;我不确定这是精度错误还是逻辑问题。

但我想知道,你们在处理金钱时只使用 BigDecimal 吗?对此有什么想法吗?

0 投票
3 回答
1960 浏览

java - 为什么这个方位计算如此不准确?

甚至有那么不准确吗?我用 Apfloat 任意精度重新实现了整个事情,这没有什么区别,我应该从一开始就知道!!

测试中的第一个断言给出了这个:

java.lang.AssertionError:预期:<270.0> 但原为:<270.29389750911355>

0.29似乎还有很长的路要走?这是我选择实施的公式吗?

0 投票
9 回答
604 浏览

c# - 浮点运算太可靠了

我知道在现代计算机系统中执行的浮点运算并不总是与实际运算一致。我正在尝试设计一个小型 C# 程序来演示这一点。例如:

但是,在这种情况下,xy到底是相等的。

我是否可以使用类似复杂性的程序来证明浮点运算的不一致性,而不使用任何真正疯狂的数字?如果可能的话,我想避免数学上正确的值超过小数点几位。

0 投票
2 回答
861 浏览

c++ - 如何在 MacOSX 上的 C++ 中设置双精度?

我正在尝试移植 _controlfp( _CW_DEFAULT, 0xffffffff ); 从 WIN32 到 Mac OS X / Intel。我完全不知道如何移植这个指令......你呢?谢谢!

0 投票
2 回答
2364 浏览

perl - 与其他语言相比,Fortran 在数值准确性方面是否存在固有限制?

在进行一个简单的编程练习时,我制作了一个 while 循环(Fortran 中的 DO 循环),它旨在在实变量达到精确值时退出。

我注意到由于使用了精度,从未满足相等性并且循环变得无限。当然,这并非闻所未闻,建议不要比较两个数字是否相等,最好看看两个数字之间的绝对差是否小于设定的阈值。

我发现令人失望的是我必须将这个阈值设置得有多低,即使变量是双精度的,我的循环才能正确退出。此外,当我在 Perl 中重写此循环的“蒸馏”版本时,我的数值准确性没有问题,并且循环正常退出。

由于产生问题的代码是如此之小,在 Perl 和 Fortran 中,我想在这里重现它,以防我忽略了一个重要的细节:

Fortran 代码

Perl 代码

Fortran 中注释掉的行是我需要用于循环正常退出的行。请注意,阈值设置为 1E-4,我觉得这很可悲。

变量的名称来自我正在执行的基于自学的编程练习,并且没有任何相关性。

目的是当速度变量达到 1700 时循环停止。

以下是截断的输出:

Perl 输出

...

Fortran 输出

...

如果 Fortran 的准确性很差,那么 Fortran 的速度和易于并行化有什么好处?提醒我做事的三种方式:

  1. 正确的方式

  2. 错误的方法

  3. 最大功率方式

“那不是走错路了吗?”

“是啊!但更快!”

除了开玩笑,我一定做错了什么。

与其他语言相比,Fortran 在数值准确性方面是否存在固有限制,还是我(很可能)是错误的?

我的编译器是 gfortran(gcc 版本 4.1.2),Perl v5.12.1,在双核 AMD Opteron @ 1 GHZ 上。

0 投票
2 回答
637 浏览

.net - TimeSpan 和双舍入误差

我正在处理物理实体,例如时间、速度和距离,并执行简单的数学运算,例如距离 = 时间 * 速度等。速度和距离是四舍五入到第 8 位的双精度值,对于时间值是​​ .NET TimeSpan用来。由于 TimeSpan 舍入到最接近的毫秒,我得到舍入错误,所以我需要编写自定义舍入方法,将所有计算舍入到最接近的毫秒。例如(为简单起见,省略了舍入到第 8 位):

  • 使用 Math.Round(d, 6) 是分布式的,但会丢失精度(精确到 ~4 毫秒)
  • 使用 Math.Round(d, 7) 精确到单个毫秒,但不是分布的(上面的 distA 将为 1.1234511 != 1.123451)
  • 使用以下(舍入到最接近的毫秒)似乎是正确的,但舍入代码本身会引入其自身的双精度错误:

    /li>

谢谢,鲍里斯。