问题标签 [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 投票
2 回答
199 浏览

c++ - 长双精度不工作或 devcpp 失败

我用过这个:

但有些数字是错误的。为什么 ?

0 投票
3 回答
11163 浏览

java - 如何解决java中的双精度问题

可能重复:
Java 浮点数和双精度数,如何避免 0.0 + 0.1 + ... + 0.1 == 0.9000001?

如何克服 java android 中双倍乘法的精度问题?请注意,我正在将字符串值转换为双精度值。

例如:当我将两个双精度值相乘时:

我得到以下结果:0.8999999999999999

我得到的一些结果是。

0.6*3=1.7999999999999998;
0.2*0.2=0.04000000000000001;
等等

我想得到以下结果,而不是上述结果。

0.3*3=0.9;
0.6*3=1.8;
0.2*0.2=0.04;

请记住,我不是想将它四舍五入到最接近的整数。

0 投票
1 回答
555 浏览

c - Glib:g_ascii_dtostr 不精确?

我对诸如“g_ascii_dtostr”(以及使用双精度的 GKeyFile 函数)之类的 glib 函数的工作方式有点感兴趣。

考虑这一行:

哪个输出

(奇怪的转换只有在我将缓冲区大小设置得足够高时才会发生)

当我(例如)将双“1.9”存储在 GKeyFile 中时会发生类似的事情,但在生成的文件中它被保存为“1.8999999999999999”。显然,通过“g_ascii_strtod”返回的转换应该是无损的,但它仍然困扰着我为什么首先会发生这种奇怪。这也使我的配置键值文件非常难看..

我想我曾经在某处读过使用了中间“long double”类型,但这仍然不能解释为什么转换后的值是“脏的”,因为例如从 int 到 double for 的转换没有任何类似的效果我认为。

0 投票
4 回答
1599 浏览

c++ - C++:双打、精度、虚拟机和 GCC

我有以下代码:

当使用 gcc(4.4、4.5 和 4.6)使用 O3 编译并本机运行(ubuntu 10.10)时,它会打印“等于”的预期结果。

但是,当按照上述方式编译并在虚拟机(ubuntu 10.10,virtualbox 映像)上运行相同的代码时,它会输出“不等于” - 这是设置 O3 和 O2 标志但未设置 O1 及以下的情况。当使用 clang(O3 和 O2)编译并在虚拟机上运行时,我得到了正确的结果。

我了解 1.1 无法使用 double 正确表示,并且我已阅读“每个计算机科学家应该了解的关于浮点运算的知识”,所以请不要指点我,这似乎是 GCC 所做的某种优化不知何故似乎在虚拟机中不起作用。

有任何想法吗?

注意:C++ 标准说在这种情况下类型提升是依赖于实现的,可能是 GCC 使用了更精确的内部表示,当应用不等式测试时它是正确的 - 由于额外的精度?

UPDATE1:对上述代码进行以下修改,现在会产生正确的结果。似乎在某些时候,无论出于何种原因,GCC 都会关闭浮点控制字。

UPDATE2:对于那些询问代码的 const 表达式性质的人,我已将其更改如下,但在使用 GCC 编译时仍然失败。- 但我认为优化器也可能将以下内容转换为 const 表达式。

UPDATE3 解决方案:将 virtualbox 升级到版本 4.1.8r75467 解决了该问题。然而,他们仍然存在一个问题,那就是:为什么 clang 构建工作。

0 投票
4 回答
869 浏览

c# - 在 C# 中模拟撕裂双精度

我在 32 位机器上运行,我能够使用以下代码片段确认长值可以撕裂,该代码片段非常迅速。

但是当我用双打尝试类似的东西时,我无法得到任何撕裂。有谁知道为什么?据我从规范中可以看出,只有对浮点数的赋值是原子的。分配给替身应该有撕裂的风险。

0 投票
4 回答
412 浏览

c++ - 影响数字比较的双粒度c ++

下面是一个测试代码块,它应该在容差范围内确定 2 个双精度值的等效性。

然而 is_match_2 结果为假,而 is_match_1 为真。我了解存储在计算机中的数字是离散值而不是连续的。有人可以分享解决方案吗?我宁愿在合理的范围内通过测试。有没有办法将 double 的值增加 1 以使其当前具有的任何精度(我不熟悉 double 的位布局)?因为我可能只是增加容差值来解决这个粒度问题。

编辑:

当这真正实现时,用户将定义输入和公差,所以我只是试图为他们输入的任何值提供预期的输出。

0 投票
1 回答
214 浏览

c# - 图像比例比较双精度

我的数学真的很弱,并且图像调整大小算法有问题。我正在尝试将图像调整为特定比例。

问题是,我似乎无法找到正确数量的像素来裁剪以实际使该AboutEqual方法起作用(我在这里找到了)。有时它会失败并且图像被无限期地裁剪,我试图记录该AboutEqual方法的内部工作,它显示了我觉得奇怪的东西,比如:

链接的问题说“如果 x 和 y 都是计算值,那么你必须增加 epsilon。” - 我如何做到这一点并找到最佳的像素数进行裁剪?

0 投票
3 回答
3214 浏览

c++ - 为什么为 x64 平台编译的 c++ 程序比为 x86 编译的要慢?

我已经编写了程序,并在 Intel Core i5-2500 上的 Visual Studio 2010 中为 x64 和 x86 平台编译了它。x64 版本执行大约需要 19 秒,x86 大约需要 17 秒。这种行为的原因是什么?

0 投票
2 回答
1750 浏览

c++ - matlab 和 c++ 精度

嗨,我正在使用armadillo用于线性代数和矩阵的库将脚本从 MATLAB 重写为 C++。

为了获得或多或少相同的输出,我调用了 cout 方法:

但我得到了不同的结果:

Matlab结果:

犰狳 c++ 结果:

现在,我不知道这些小不精确(0.039接近0.041)是否是由我翻译的 C++ 代码中的一些错误引起的,或者它们应该被视为 g++ 和 MATLAB 中双精度之间的正常差异

在我的代码中,我使用了很多这样的循环:

其中xi_summed, trans, alpha,barma::mat并且%是逐元素乘法 并且mat::t()是 transpose 和 normalize 是使矩阵A数组的条目总和为的函数1

0 投票
5 回答
25883 浏览

java - Java BigDecimal 精度问题

我知道以下行为是一个老问题,但我仍然不明白。

或者即使我使用BigDecimal

为什么这个结果是:0.30000000000000004而不是:0.3

我该如何解决这个问题?