问题标签 [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.
c++ - 长双精度不工作或 devcpp 失败
我用过这个:
但有些数字是错误的。为什么 ?
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;
请记住,我不是想将它四舍五入到最接近的整数。
c - Glib:g_ascii_dtostr 不精确?
我对诸如“g_ascii_dtostr”(以及使用双精度的 GKeyFile 函数)之类的 glib 函数的工作方式有点感兴趣。
考虑这一行:
哪个输出
(奇怪的转换只有在我将缓冲区大小设置得足够高时才会发生)
当我(例如)将双“1.9”存储在 GKeyFile 中时会发生类似的事情,但在生成的文件中它被保存为“1.8999999999999999”。显然,通过“g_ascii_strtod”返回的转换应该是无损的,但它仍然困扰着我为什么首先会发生这种奇怪。这也使我的配置键值文件非常难看..
我想我曾经在某处读过使用了中间“long double”类型,但这仍然不能解释为什么转换后的值是“脏的”,因为例如从 int 到 double for 的转换没有任何类似的效果我认为。
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 构建工作。
c# - 在 C# 中模拟撕裂双精度
我在 32 位机器上运行,我能够使用以下代码片段确认长值可以撕裂,该代码片段非常迅速。
但是当我用双打尝试类似的东西时,我无法得到任何撕裂。有谁知道为什么?据我从规范中可以看出,只有对浮点数的赋值是原子的。分配给替身应该有撕裂的风险。
c++ - 影响数字比较的双粒度c ++
下面是一个测试代码块,它应该在容差范围内确定 2 个双精度值的等效性。
然而 is_match_2 结果为假,而 is_match_1 为真。我了解存储在计算机中的数字是离散值而不是连续的。有人可以分享解决方案吗?我宁愿在合理的范围内通过测试。有没有办法将 double 的值增加 1 以使其当前具有的任何精度(我不熟悉 double 的位布局)?因为我可能只是增加容差值来解决这个粒度问题。
编辑:
当这真正实现时,用户将定义输入和公差,所以我只是试图为他们输入的任何值提供预期的输出。
c# - 图像比例比较双精度
我的数学真的很弱,并且图像调整大小算法有问题。我正在尝试将图像调整为特定比例。
问题是,我似乎无法找到正确数量的像素来裁剪以实际使该AboutEqual
方法起作用(我在这里找到了)。有时它会失败并且图像被无限期地裁剪,我试图记录该AboutEqual
方法的内部工作,它显示了我觉得奇怪的东西,比如:
链接的问题说“如果 x 和 y 都是计算值,那么你必须增加 epsilon。” - 我如何做到这一点并找到最佳的像素数进行裁剪?
c++ - 为什么为 x64 平台编译的 c++ 程序比为 x86 编译的要慢?
我已经编写了程序,并在 Intel Core i5-2500 上的 Visual Studio 2010 中为 x64 和 x86 平台编译了它。x64 版本执行大约需要 19 秒,x86 大约需要 17 秒。这种行为的原因是什么?
c++ - matlab 和 c++ 精度
嗨,我正在使用armadillo
用于线性代数和矩阵的库将脚本从 MATLAB 重写为 C++。
为了获得或多或少相同的输出,我调用了 cout 方法:
但我得到了不同的结果:
Matlab结果:
犰狳 c++ 结果:
现在,我不知道这些小不精确(0.039
接近0.041
)是否是由我翻译的 C++ 代码中的一些错误引起的,或者它们应该被视为 g++ 和 MATLAB 中双精度之间的正常差异
在我的代码中,我使用了很多这样的循环:
其中xi_summed
, trans
, alpha
,b
是arma::mat
并且%
是逐元素乘法 并且mat::t()
是 transpose 和 normalize 是使矩阵A
数组的条目总和为的函数1
。
java - Java BigDecimal 精度问题
我知道以下行为是一个老问题,但我仍然不明白。
或者即使我使用BigDecimal
为什么这个结果是:0.30000000000000004
而不是:0.3
?
我该如何解决这个问题?