问题标签 [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 投票
9 回答
22488 浏览

floating-point - 浮点数是如何存储的?什么时候重要?

在跟进这个问题时,似乎有些数字根本不能用浮点表示,而是近似的。

浮点数是如何存储的?

不同尺寸是否有共同标准?

如果我使用浮点数,我需要注意哪些问题?

它们是否跨语言兼容(即,我需要处理哪些转换才能通过 TCP/IP 将浮点数从 python 程序发送到 C 程序)?

0 投票
2 回答
3134 浏览

vb.net - 如何处理 vb.net 中双精度数的舍入错误?

我正在尝试使用 vb.net 平衡一组货币价值。这两个值的总和被转换为双精度值。在某些情况下,我会遇到舍入错误。

避免这种情况的最佳方法是什么?有没有一种我可以优先使用的类型?如何将结果值四舍五入到小数点后两位?

这是我的代码——我可能不需要展示它,但以防万一。

0 投票
3 回答
5141 浏览

numerical-analysis - 如何在特定机器上找到尾数长度?

我想在特定计算机上找到尾数位数和单位舍入。我了解这些是什么,只是不知道如何找到它们-尽管我知道它们可能因计算机而异。

我需要这个数字来执行数值分析的某些方面,比如分析错误。

我目前在想的是,我可以编写一个小的 c++ 程序来缓慢递增一个数字,直到发生溢出,但我不确定要使用什么类型的数字。

我在正确的轨道上吗?究竟如何计算这个?

0 投票
8 回答
923 浏览

java - 如何处理接近1的数字的乘法

我有一堆浮点数(Java 双精度数),其中大部分非常接近 1,我需要将它们相乘作为更大计算的一部分。我需要做很多

问题是,虽然 Java 的双打对像这样的数字没有问题:

他们不能代表类似的东西:

因此,我迅速失去了精度(Java 的双打的限制似乎在 1.000000000000001 左右)。

我考虑过只存储减去 1 的数字,因此例如 1.0001 将存储为 0.0001 - 但问题是再次将它们相乘我必须加 1,此时我失去了精度。

为了解决这个问题,我可以使用 BigDecimals 来执行计算(转换为 BigDecimal,加 1.0,然后相乘),然后再转换回双精度数,但我非常担心这会对性能产生影响。

任何人都可以看到避免使用 BigDecimal 的方法吗?

为清楚起见进行编辑:这是针对采用梯度下降优化算法的大规模协同过滤器。准确性是一个问题,因为协同过滤器通常处理非常小的数字(例如,一个人点击产品广告的概率,可能是千分之一,或万分之一)。

速度是一个问题,因为协同过滤器必须在数千万个数据点上进行训练,如果不是更多的话。

0 投票
5 回答
10721 浏览

php - php intval() 和 floor() 返回值是否太低?

因为 PHP 中的浮点数据类型不准确,并且 MySQL 中的 FLOAT 占用的空间比 INT 多(并且不准确),所以我总是将价格存储为 INT,在存储之前乘以 100 以确保我们有 2 个小数位的精度. 但是我相信 PHP 行为不端。示例代码:

产生的输出:

我很惊讶。当最终结果比预期低 1 时,我希望测试的输出看起来更像:

这将证明浮点类型的不准确性。但是为什么 floor(115) 返回 114?

0 投票
6 回答
33137 浏览

python - 什么类用于货币表示?

我应该使用什么类来表示货币以避免大多数舍入错误?

我应该使用Decimal,还是简单的内置number

有没有Money我可以使用的支持货币转换的现有课程?

我应该避免的任何陷阱?

0 投票
1 回答
297 浏览

sql - sql和clr中舍入的区别

我已经搜索并找不到答案。我仔细检查了 SQL 和 CLR 之间的数据类型,我似乎是正确的。但是我在使用 CLR 和 SQL 之间得到了不同的结果。不多,但足够花一分钱。这是不可接受的。

VB.NET 中的示例

将显示 1476.34499999999

SQL 中的示例

返回 1476.345000000000000

对于一些文件我们必须使用VB,但是对于一些文件传输我们使用sql。任何人有任何建议这是为什么?

干杯
鲍勃

0 投票
4 回答
7631 浏览

gdi - 指定 GDI 设备上下文的 DPI

我有一个生成元文件(EMF)的应用程序。它使用参考设备(又名屏幕)来渲染这些元文件,因此元文件的 DPI 会根据代码运行的机器而变化。

假设我的代码打算创建一个 8.5 英寸 x 11 英寸的元文件。使用我的开发工作站作为参考,我最终得到一个具有

  • { 0, 0, 21590, 27940 } 的 rclFrame(元文件的尺寸,以千分之一毫米为单位)
  • { 1440, 900 } 的 szlDevice(参考设备的尺寸,以像素为单位)
  • { 416, 260 } 的 szlMilimeters(参考设备的尺寸,单位为 mm)

好的,所以 rclFrame 告诉我 EMF 的大小应该是

  • 21590 / 2540 = 8.5 英寸宽
  • 27940 / 2540 = 11 英寸高

对了。使用这些信息,如果我的数学是正确的,我们也可以确定我的显示器的物理 DPI:

  • (1440 * 25.4) / 416 = 87.9231 水平 dpi
  • (900 * 25.4) / 260 = 87.9231 垂直 dpi

问题

任何播放此元文件的东西——EMF 到 PDF 的转换、在 Windows 资源管理器中右键单击 EMF 时的“摘要”页面等——似乎都会截断计算的 DPI 值,显示 87 而不是 87.9231(甚至88就好了)。

这会导致在播放元文件时页面的物理尺寸为 8.48 in x 10.98 in(使用 87 dpi)而不是 8.5 in x 11 in(使用 88 dpi)。

  • 是否可以更改参考设备的 DPI,以便存储在用于计算 DPI 的元文件中的信息变成一个很好的整数?
  • 我可以创建自己的设备上下文并指定其 DPI 吗?还是我真的必须使用打印机才能做到这一点?

感谢您的任何见解。

0 投票
11 回答
3592 浏览

c++ - 用 C++ 表示概率

我试图在 C++ 中表示一组简单的 3 个概率。例如:

(据我所知概率必须加起来为 1)

我的问题是,当我尝试将 C++ 中的 0.7 表示为浮点数时,我最终得到 0.69999999,这在我稍后进行计算时无济于事。对于 0.8、0.80000001 也是如此。

有没有更好的方法在 C++ 中表示 0.0 和 1.0 之间的数字?

请记住,这与数字如何存储在内存中有关,因此在对它们正确的值进行测试时,我不关心它们是如何显示/打印出来的。

0 投票
6 回答
12029 浏览

c# - ToString("f2") 中的 .NET 舍入错误

您好,我在 C# 中有这段代码:

而这段 C++ 代码:

一个输出3.00
第二个输出2.99

我不知道为什么会这样。

更新:

我还尝试了 Objective-C NSLog,输出为2.99

我需要快速修复它,所以我使用了以下方法:

此代码显示2.99,但以双精度计算舍入。我找不到 Math.RoundF。