问题标签 [rounding-error]
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++ 中的舍入错误的信息。所以,如果我正在制作一个数学密集型程序(或任何重要的计算),我应该把浮点数放在一起并只使用双精度数还是有更简单的方法来防止舍入错误?
c# - C# 舍入 MidpointRounding.ToEven 与 MidpointRounding.AwayFromZero
在 C# 中,两种小数舍入策略的准确性MidpointRounding.ToEven
和? 有什么区别MidpointRounding.AwayFromZero
吗?我的意思是两者都确保四舍五入的数字之间的均匀分布,还是一种舍入策略优于表示舍入数字与另一种相比?
java - 简单方程未通过单元测试
我有将 2 个整数作为参数并返回的方法:
我创建了单元测试,它通过值 1400 和 1500(预期值为 43),但它对 1459 和 1500 失败。预期输出为 18,但我的方法返回 17。我相信这可能与舍入有关,但是我看不到任何明显的错误。将 17.7(6) 舍入到 18 应该没有任何问题。
编辑:
真正的功能略有不同(我没有 Math.abs(ab) 而是因此定义了“diff”变量。我可以向你们保证,我将其声明为双 diff;-我不知道为什么它变成 int diff :) 解决了谢谢 :)
ruby - Ruby Float Round 错误错误?
当我尝试对以下类进行单元测试时,出现以下舍入错误:
单元测试:
输出:
我使用浮点数是因为它在 Pick Ax 书中被推荐用于美元价值,因为它们不应该因回合错误而有效。
我ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
在 Windows 7 64 位 Home 和 Windows XP 32 位 Pro 上运行。
我试过了
- 将我的变量转换为浮点数
- 删除 += 并拼出增量
行为出现随机:
- 12.22 + 7.31 作品
- 11.11 + 7.31 不起作用
- 11.111 + 7.31 作品
任何想法出了什么问题?
c - 函数的 R & C 版本给出不同的结果 - 舍入还是操作员错误?
我有一个用 C 重写的 R 代码块,这两个版本提供了不同的结果。我的信念是,这是由于 R 级别的舍入问题,即正在执行多个数学运算,这会产生复杂的舍入问题,而不是在 C 中完成整个事情并且舍入只发生一次。恐怕我在这里过于乐观,并希望有更多的眼睛来看看我是否遗漏了一些东西,而这实际上只是我的编码不佳。
首先是R代码:
现在在 C 中:
例如,传入值 5、5、5、0 在 R 中给出 13.19,在 C 中给出 12.69。从技术上讲,R 代码是矢量化的,但这个特定的 C 代码块不是,所以我不想提供矢量化输入一个例子。
这些功能是否相同,或者我做错了什么?
ruby - BigDecimal 计算错误
考虑以下规范:
该方法total_percent
以百分比计算值列表的总差异。请忽略算法本身(仅查看第一个和最后一个值可以获得相同的结果)。
规范失败,因为计算结果不等于0.0
。问题是它在哪里失去了精度。
编辑:在 OS X 10.7.2 上使用 JRuby 1.6.5。
c++ - Kahan算法中的加法而不是减法
它使用减法(而不是加法)是否有特定原因?如果我在 的计算中交换操作数c
,我可以使用加法代替吗?不知何故,这对我来说更有意义:
或者我还不知道的浮点加法和减法之间是否存在一些奇怪的区别?
(t - sum) - y
另外,t - sum - y
原始算法之间有什么区别吗?括号不是多余的,因为-
它是左结合的,无论如何?
c++ - 如何控制双精度计算以避免 C++ linux x86_64 中的舍入错误?
在 linux x86_64 上的 C++ 代码中,我需要双精度计算(+ 或 -)。
26.100000000000001 - 26 + 0.10000000000000001
我有:
0.20000000000000143
我想得到0.2。
这里,显示格式不导入,计算结果将用于一些if-else分支条件。所以,我只希望 if-else 条件比较小数位后的 4 位数字。
这似乎是一个四舍五入的错误?
如何将计算精度限制为小数点后 4 位?
我不想调用任何函数以避免开销。
由于转换开销,我不想使用 stringstream。
有更好的主意吗?
谢谢
c# - 将 DateTime 舍入到 30 分钟时处理没有分钟的小时
我试图模仿谷歌日历和 Outlook 处理时间选择的方式,其中所有时间条目相隔 30 分钟。除了一件事,我几乎所有的东西都与功能测试一起工作。我的问题是我不知道如何确保我总是将当前日期四舍五入到 30 分钟。
我正在使用以下代码:
这适用于大多数情况,除了上午 12:00(我希望它会在上午 12:30 返回)和上午 8:56(我希望它会在上午 9:00 返回)。
我怎样才能解决这个问题?
image - Jpeg 图像压缩:量化问题
在将原始图像编码为 jpeg 图像时,8x8 数据单元被电平移动,使用 2-D DCT 进行转换,量化和霍夫曼编码。
我首先执行了行 DCT,然后执行了列 DCT,并将结果四舍五入到最接近的整数。我将此块发送到量化模块。在量化时,我使用了以下 Q 表。这些表是 IJG 推荐的品质因数 99。
亮度表1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1
1 1 1 2 2 1
1 1 1 1 1 2 2 2
1 1 1 1 2 2 2 2
1 1 2 2 2 2 2 2
1 2 2 2 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 2 2 2 2 2
1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2
2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2
在量化期间,除以“2”时,我将结果从零四舍五入。示例:11/2 = 6。因此,在解码时的去量化过程中,每个奇数都会增加 +1 的误差。
在另一个设置中,我改变了我的舍入技术。在这里,我将结果四舍五入为零。示例:11/2 = 5。因此,在解码时的去量化过程中,每个奇数都会添加一个 -1 的误差。
在第二种情况下,我得到的文件大小非常小(对于 768x512 图像,文件大小减少了近 100 kb)和更多的 PSNR。我可以通过说所有被 2 量化时为“1”的 AC 系数现在将变为 0 而不是 1 来解释较小的文件大小。因此 RLE 使文件大小更小。但我无法解释为什么编码图像质量会提高。它增加了 2-3 分贝,并且发生在我测试的所有图像中。
我的论点是因为 DCT 基本上是 A * DCTmatrix 两边的相等误差应该产生相等的损失。但这里不是这种情况。