问题标签 [floating-accuracy]

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 回答
1343 浏览

objective-c - Objective C 数学公式失败

这里的菜鸟想计算 iPhone 上的复利。

公式应该是:金额=本金*(1+利率/每年复合)^(利率*年)

我得到稍微不正确的答案:

我正在以 0.1 的速率对其进行测试,但调试器报告 .100000001 。

我做错了吗?我应该使用双打还是特殊课程(例如,NSNumber)?

感谢您的任何其他想法!


经过进一步研究,似乎 NSDecimalNumber 类可能正是我所需要的。现在我只需要弄清楚如何使用这个坏男孩。

0 投票
3 回答
2329 浏览

ruby - 在 Ruby 中处理大量(高精度)浮点数

我正在制作一个应用程序,它正在监听定期更新的价格,但偶尔我的数据源会向我抛出类似“1.79769313486232e+308”的信息。发送的数字永远不会是非常大的数字(例如“179769313486232e+308”),但与上面的示例一样,它们具有很高的精度。

我很乐意删除前几个小数位之后的所有内容,最终得到类似“1.798”的内容,但以下代码对我不起作用:

在 Ruby 中处理这些数字的任何优雅方法?

0 投票
6 回答
12242 浏览

c - 尝试编写代码来查找机器 epsilon

我试图找出 C 中各种浮点格式的精度级别(即浮点、双精度和长双精度)。这是我目前正在使用的代码:

正如预期的那样,这给出了大约 ~2^-64 的值。但是,当我将减速更改为双打或“长双打”时,我得到相同的答案,我应该得到一个较小的值,但我没有。有人有什么想法吗?

0 投票
9 回答
10437 浏览

c - 数的第 n 个根

我写了一个程序来计算一个数字的 n 次根,直到小数点后 2 位。例如,81 的第 4 根是 3,125 的第 3 根是 5。除了 4 的第 2 根外,它工作得很好。它给出的输出是 1.99 而不是 2。这是代码。

我已经尝试了几个小时,但无法纠正它。任何人都可以调试这个吗?我将非常感激。

0 投票
3 回答
473 浏览

.net - C# .Net 双重问题... 6.8 != 6.8?

我在工作中进行了一些单元测试,其中一个断言出现了一个特殊的错误。请注意,expectedValue 和 actualValue 都是双精度值。

例外声明它们不相等,详细说明“预期值:<6.8> 实际值:<6.8>”。

预期值是硬编码的 6.8,而实际值是使用通过我们的分类方法(例如 Equal Records 或 Jenks Natural Breaks)的数据库值制定的。

我的猜测是,差异可能是 2 个值的尾数相似,直到最低有效位。我更新了测试以包含一个 epsilon 以查找这两个值是否足够接近,但我很好奇是否有一种方法可以强制尾数与我显示该双精度的显示值相匹配。是否存在这样的尾数校正?

0 投票
2 回答
1704 浏览

c - C的pow()函数根据头文件不能正常工作

我看到以下代码产生如下结果,知道为什么输出是这样的吗?

输出:

0 投票
7 回答
280 浏览

php - PHP中的四舍五入

PHP 返回错误。

谁能解释一下,为什么会这样?第一个返回 8,第二个返回 7。

0 投票
2 回答
120 浏览

optimization - 如何优化此计算

我正在编写一个模型检查器,它依赖于以下算法密集使用的系数的计算:

![替代文字][1]

哪里q是双,t也是一个双和k一个整数。e代表指数函数。该系数用于步骤中,q并且始终tk0 开始,直到(该步骤的)所有先前系数的总和达到 1 为止。

我的第一个实现是字面的:

当然,这并没有持续多久,因为当k超过一个小阈值(15-20)时计算整个阶乘是不可行的:显然结果开始变得疯狂。所以我通过增量划分重新安排了整个事情:

这个版本在足够“正常”的情况下工作得很好,q但是当事情变得奇怪时,例如,我开始计算它,我得到的是一系列 0,然后是从某个数字到最后的 NaN。tq = 50.0t = 100.0k = 0 to 100

当然,这是由于数字开始太接近 0 或类似问题的操作造成的。

您对我如何优化公式以便能够在广泛的输入范围内提供足够准确的结果有任何想法吗?

一切都应该是 64 位的(因为我使用的是 OCaml,它默认使用双精度)。也许也有一种方法可以使用 128 位双打,但我不知道如何。

我正在使用 OCaml,但您可以使用任何您想要的语言提供想法:C、C++、Java 等。我完全使用了所有这些语言。

0 投票
3 回答
564 浏览

ruby - Ruby 打印出带有可选数字的浮点数

我正在尝试打印出一个具有价值的浮点数5

当它打印出来时我得到的是5.0,所以我的问题是:

我如何做到这一点,如果值是 just 5,它只会在5没有.0后面的情况下打印,如果是5.2这样,它会打印出来?

我环顾四周,但我发现的只是以一种或另一种方式强制它。

有人可以帮助我朝着正确的方向前进吗?谢谢 :)

0 投票
3 回答
1860 浏览

sql - 为什么在访问查询中看到 -0,000000000000001?

我有一个 sql:

问题有时是 field1 和 field2 的总和是这样的值:9.5-10.3,结果是 -0,800000000000001。任何人都可以解释为什么会发生这种情况以及如何解决它?