问题标签 [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.
scala - 在 Scala 中舍入双精度或浮点数的最佳方法是什么?
基本上断言被炸毁,出勤率返回 134 而不是 135。所以我把 math.ceil 扔给它,它起作用了。但我只是想知道这是否是最好的/正确的/惯用的方法。
对于那些想知道此代码来自哪里的人:出勤代码
ios - Cocos2d,iOS,Objective-C:浮动错误
我在一个空项目上对此进行了测试,但没有发生。
如您所见,当我减去 bossPercentage 值时,newValue 变为2.98023e-08 。仅当bossPercentage为 0.2f 且先前值为 0.2f 时才会发生这种情况。 差异应该是 0.0f但我不明白为什么我会得到2.98023e-08。
作为参考,remainingBossPercentage 是 [GameController] 类中的一个属性,定义如下:
我想问一下我可能正在做什么导致这个错误。
编辑:我从剩余BossPercentage 中减去 0.2f(对于每个boss敌人),一切正常,直到我到达最后一个再次具有 0.2f 的敌人对象,并且我达到了 0.2f - 0.2f 的关键点(下面的屏幕截图)
编辑 2:我非常感谢所有评论和答案,以及最后的投票。促使我提出这个问题的原因是 newValue 是 2.98023e-08。我现在看到还有比较问题(感谢投票关闭答案的人所链接的非常有用的 QA)。我想知道的是..为什么在我只有 2 个测试变量的新测试项目中不会发生这种情况?(我创建了一个减去两个浮点数的 HelloWorld 项目)。
我之所以这么问,是因为正如其中一位用户所建议的那样,理解浮点数而不走捷径很重要。是的,我问这个问题是走捷径,因为我今晚没有时间好好学习它,但我想尽我所能去理解和学习。我会正确阅读答案并花时间去理解,但如果同时可以的话,我想补充一个疑问:
可能是因为内存管理的原因,这两个项目(测试项目和我的实际游戏)表现不同吗?这两个项目的不同行为是否与脏区中的内存交换有某种联系?(例如,内存使用量更大的游戏被交换得更多,因此可能会损失精度?)
PS:我发现了一个与 2.98023e-08 值完全相同的问题。我仍然想知道为什么这不会发生在同一个测试项目中(我现在正在做更多的测试)。
tsql - SQL Server 找不到包含它返回的浮点值的记录
我有一个类似的查询:
对于 FLOAT 列 ConsumptionRate,返回的记录的值为 16.5667068820687。
我现在将以下内容添加到查询的末尾:
执行新查询返回零记录,即使附加条件正是 SQL Server 本身报告的内容。我认为这是一个舍入错误。但是,我有一个 CLR 函数,它根据第一个返回的结果执行第二个查询。
我可以在生成的搜索条件中做些什么来保持第一个结果的准确表示,但不会错过第二个结果中的现有记录?
c - acos() 在 C 中有两个接近点的坏结果
我正在制作一个函数,该函数使用它们的纬度/经度(以度而不是弧度为单位)和余弦球面定律来计算两点的距离。我遇到的问题是,由于函数中的舍入误差,acos()
当两点彼此非常接近时,我获得的结果远非良好。
输出是
正如你所看到的,当它计算时acos()
它应该给出零,但它确实给出了一些误差,这些误差在乘以地球半径后会被极大地放大。当两点不相等但非常接近时也会发生这种情况。如果有任何用处,我关于纬度和经度的数据最多有 7 位小数。
python - 渐近函数中的浮点问题接近零 - Python
来自 MATLAB 的 Python 新手。
我正在使用幅度尺度函数的双曲正切截断。0.5 * math.tanh(r/rE-r0) + 0.5
将函数应用于范围值数组时遇到问题r = np.arange(0.1,100.01,0.01)
。0.0
我在接近零的一侧得到了几个函数值,这在我执行对数时会导致域问题:
我使用这个解决方法:
这对我正在做的事情来说已经足够了,但它有点像创可贴的解决方案。
根据数学明确性的要求:
在天文学中,震级规模大致如下:
其中 mzp 是每秒看到 1 个光子的幅度。因此,更大的通量等同于更小(或更负)的视震级。我正在为使用多个组件功能的源制作模型。前任。两个具有不同 sersic 索引的 sersic 函数,P1
在内部组件上具有外部1-P1
截断,在外部组件上具有内部截断。这样,当向每个分量添加截断函数时,由半径定义的幅度将变得非常大,因为 mu1-2.5*log( P1
) 在P1
渐近接近零时变得非常小。
TLDR:我想知道的是,是否有一种方法可以保留精度不足以与零区分开来的浮点(特别是在渐近接近零的函数的结果中)。这很重要,因为当取这些数字的对数时,结果是域错误。
非对数 P1 中的输出开始读取零之前的最后一个数字是5.551115123125783e-17
,这是一个常见的浮点算术舍入误差结果,其中所需的结果应该为零。
任何投入将不胜感激。
@user:Dan 没有放我的整个脚本:
其中 bn(n1)=7.72 和 B(rb1,drs1) = 2.65 - 4.98 * ( r_b1 / (-drs1) );
mu1 是要截断的分量的幅度分布。P1 是截断函数。P1 的许多最终条目为零,这是由于浮点精度导致浮点与零无法区分。
查看问题的简单方法:
还要注意零之前的浮点数。
magento - Magento:目录和产品视图价格含税 (VAT) 不正确
我在网上寻找解决我的问题的方法,但看不到该特定问题的答案。
我正在使用 Magento CE 1.8.0 目录中的价格不含增值税 增值税设置为 20% 系统设置为不含税价格 前端目录列表和产品页面设置为显示不含增值税和含增值税的价格.
我的问题是,某些产品的含增值税价格在目录列表和产品视图中超出了 1 便士,尽管在结帐时它是正确的。
例如,价格为 34.49 英镑(不含增值税)的产品在列表视图和产品页面(不正确)和结帐页面(正确)中显示的含增值税价格为 41.38 英镑。
问题是我有一个 Google 商家提要向 Google 发送正确的价格(含增值税)(41.39 英镑),他们抱怨网站上的价格不同(即使只是 1 便士)。
我见过很多人的结帐总数不正确,而目录价格正确,但反之则不然。有没有人知道问题可能是什么?
java - Java 的数学运算不如预期
我对Java有这个非常奇怪的问题。基本上,这就是正在发生的事情:
这将与
但它不返回 2,它返回 1!但是,第二行确实返回 2!这真的很奇怪……
如果有帮助,这是实际的代码行:
有谁知道这里发生了什么以及如何解决它?
perl - 用于 printf/sprintf 的 Perl 舍入错误
谁能解释一下这是怎么回事:
输出这个:
目前我已经停止使用 printf 和 sprintf 因为我不信任它们。所以我这样做了:
这有效,但很好奇我为什么需要这样做。
我了解二进制数如何不能准确地表示所有以 10 为基数的数字,并阅读了此 Stack Overflow 条目:如何消除 Perl 舍入错误,但老实说,我没想到会看到这样一个看似简单的示例出现问题。
$amount 的值也是正确的。只是 printf 没有正确打印!
有任何想法吗?
javascript - 浮点错误混乱
我一直试图在javascript中解决这个浮点问题。这是我想做的一个例子:
但是,在这种形式下,我会得到一个舍入错误,0.2 -> 0.4 -> 0.600...001 这样做。
我已经尝试过parseFloat
,toFixed
并Math.round
在其他线程中提出了建议,但没有一个对我有用。那么有没有人可以完成这项工作,因为我觉得我已经没有选择了。
java - 在 3-D 空间中生成随机共面点
我需要在 3-D 空间中生成随机共面点。平面方程为:
我通过随机化 a、b、c 和 d 来生成平面。为了在该平面上生成随机点,我使用以下代码:
但是当我使用Cayley-Menger 行列式检查点是否共面时,行列式永远不会等于零(即点不共面)。
有趣的是,当我在 x = 0 平面上生成点时,Cayley-Menger 行列式工作得非常好!
这是舍入错误还是其他?
编辑:长度、宽度和高度是整数值。