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

0 投票
2 回答
1005 浏览

android - 如何解决 Android SQLite 舍入错误

我们的 Android 应用程序存在四舍五入的问题。在用 Java 进行的计算中,我们使用 BigDecimal,这很有帮助,但是我们在使用 SQLite 时遇到了问题,例如。

0 投票
1 回答
566 浏览

ruby - Ruby - Sqrt 在一个非常大的整数上导致舍入问题

我正在尝试解决斐波那契问题,并且遇到了四舍五入的问题。

如果i = 8670007398507948658051921那么fib1 = 19386725908489880000000000.0.

我的代码如下 - 感谢您的帮助。

0 投票
1 回答
1136 浏览

objective-c - NSJSONSerialization.JSONObjectWithData 浮点转换/舍入错误?

我简单的 RubyMotion 代码:

该 url 是一个天气 API,它提供一个 JSON 格式的浮点数,如{ "temp_c":22.4, ... }. 奇怪的是,浮点数22.4被转换为22.3999938964844.

如果我检查data.to_s温度读数22.4,那么我认为错误在NSJSONSerialization.JSONObjectWithData.

  • 谁能证实这一点?
  • 有一个通用的解决方案吗?

我不想强制对所有浮点数进行舍入。

0 投票
2 回答
103 浏览

java - 如何在以小速度进行鼠标定位时避免 int-floor 偏差?

我有一个简单的算法,让对象在 Java 中以给定的最大速度跟随鼠标指针。该算法的关键在于:

这是以每秒 30 帧的速度运行的。性能不是问题。

代码在中等到大的值maxSpeed(5 及以上都可以)下运行良好,但在非常低的值下,代码会导致对象仅以特定角度移动。例如,在 处maxSpeed = 1,目标只能以 45° 角移动。


以下是我对问题的理解:

maxSpeed相等1。因此,因为Math.sinandMath.cos总是返回 [-1, 1] 范围内的值,dy并且dx也将在 [-1, 1] 范围内。当通过四舍五入转换为整数时(因为目标 x 和 y 位置被定义为int变量),位移均被四舍五入为-101,有效地将可能的移动限制在相同的八个角度。

因此,例如,如果对象从 (0, 0) 开始并且我将鼠标定位在 (300, 100),则对象将首先完美地水平移动,然后以 -45° 的角度移动。我希望物体以(大约)恒定角度移动,从起点到目的地的(大约)直线。

除了将基础 x 和 y 坐标转换为值之外,最好的方法是什么double

0 投票
0 回答
148 浏览

math - 如何在没有舍入误差的情况下获得六边形边缘的坐标?

我需要在 JavaScript 中生成 6 个坐标(x,y),代表六边形的边缘,但我需要结果没有“舍入错误”,我该如何实现?当我有舍入误差时,如果六边形足够大,在坐标处绘制的圆圈之间会有一些不需要的空间,或者换句话说,它们不能准确地对齐在一起。

也许用于计算坐标的数学需要摆脱 cos 或 sin 等某些方法?但如果没有,我有什么选择?我尝试使用 BigDecimal ( https://github.com/dtrebbien/BigDecimal.js )来表达数学,但它似乎并没有改变任何东西,尽管也许我用错了,我宁愿不必使用它.

无效方法一:http: //jsbin.com/ekuyam/2/edit

无效方法二:http: //jsbin.com/ekuyam/4/edit

小的:

在此处输入图像描述

大的:

在此处输入图像描述

0 投票
4 回答
3269 浏览

c# - 如何处理无限重复的小数?

当除法导致无限重复的数字时,该数字显然会被截断以适应小数的大小。所以像 1/3 这样的东西变成像 0.3333333333333333333 这样的东西。如果我们将该数字乘以 3,我们会得到类似 0.999999999999999999 的结果,而不是保留分数的真实值时得到的 1。

这是 MSDN 关于十进制的文章中的代码示例:

当将值 0.9999999999999999999 与 1 进行比较以获得相等性时,这会导致问题。如果没有精度损失,它们将是相等的,但是在这种情况下,比较当然会导致错误。

人们通常如何处理这个问题?除了为每次比较定义一些误差范围之外,还有更优雅的解决方案吗?

0 投票
1 回答
48 浏览

ios6 - 四舍五入并不总是按预期工作

我想向我的用户收取他们使用服务的每小时或分数的 1 个信用额度。为了计算成本,我使用以下代码,但在某些情况下,例如当开始日期和结束日期正好相差一天时,我得到的成本是 25 个学分而不是 24 个:

我究竟做错了什么?

0 投票
3 回答
4419 浏览

c++ - c++浮点减法误差和绝对值

我理解它的方式是:double在 C++ 中用双精度减去两个数字时,它们首先被转换为一个有效数字,从 2 的指数幂开始。如果减去的数字具有相同的指数并且有效数字中有许多相同的数字,则可能会出现错误,从而导致精度损失。为了测试我的代码,我编写了以下安全添加函数:

然而,测试这个我注意到一些奇怪的事情:似乎实际错误(不是函数是否报告错误,而是计算产生的实际错误)似乎取决于减去数字的绝对值,而不仅仅是相等数字的数量在显着...

例如,使用1e-11作为精度prec并减去以下数字:

1)9.8989898989898-9.8989898989897:函数报告错误,我得到高度不正确的值9.9475983006414e-14

2)98989898989898-98989898989897:函数报错但我得到正确的值1

显然我误解了一些东西。有任何想法吗?

0 投票
1 回答
1331 浏览

r - r中的汇总函数舍入误差?

我有一个 16968 行数据框(准确的原因将在下面说明)。我正在检查运行变量 (data$Ob) 是否实际上是按顺序计算每一行(第一行 data$Ob 是 1...最后一行 data$Ob 是 16968 以及其间的每一行。

当我运行 summary(data$Ob) 时,它告诉我最大值是 16970 而不是 16968。当我运行 max(data$Ob) 时,它说最大值是 16968,而不是摘要中的值。

我运行了一个 for 循环来检查每个观察结果,看起来 max() 函数是正确的,并且 data$Ob 变量正在做它应该做的事情。但是有谁知道为什么摘要功能关闭了 2?我假设舍入错误(不知何故?)但是这个数据检查对我正在做的分析至关重要,如果它错误,那么我的后续分析将是错误的。

这是我运行的 for 循环,但我认为这对这个问题并不重要。

谢谢。

0 投票
5 回答
3617 浏览

c# - C# 中的舍入数字产生太多小数位

我正在尝试将浮点数四舍五入到小数点后 6 位。从 double 转换为 float 似乎几乎可以做到这一点,但是在此过程中我注意到了一些奇怪之处。无论我做什么,如果我稍后转换回精度值,我似乎最终会得到虚构的额外十进制值。我无法避免转换回双精度 - 这在我无法更改的应用程序的一部分中,所以我只是想了解为什么我的代码会产生原本不存在的额外小数位。

例如; 我从以下值开始并将其转换为双精度值:

..那么“bar”将是: 调试器中的50.846717834472656

但是

...产生:50.8467178 (在调试器中)。即它没有额外的价值。

为什么最后会出现多余的数字?我怎样才能阻止这个?最后:为什么在上述任何一个上调用 ToString() 与调试器显示的相比,通常输出不同的小数位数?