问题标签 [floating-point-precision]
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.
python - 在(看似)无限循环中耗尽浮点精度
我有以下 Python 脚本:
如果 x 是浮点数,这个看似无限的循环会很快终止。但是,如果我将 x 更改为 300000000,它会进入无限循环(在我的测试中运行时间超过一分钟)。
我认为这是因为它耗尽了可以在内存中表示的浮点数的精度。有人可以提供更详细的解释为什么会这样吗?
c++ - 如何在不损失精度的情况下将 32 位随机函数输出缩放为 0...1 值?
我当前的功能如下:
但是后来我意识到,一旦将值转换为浮点数,它就会失去精度,对吧?
我应该先把它转换成双倍吗?
但这感觉不是正确的做法。我该怎么做?
c - Visual Studio 2010 的多精度
任何人都可以建议一个预构建的 Windows 二进制文件附带的多精度库。我需要将它与现有的 Visual Studio 2010 项目一起使用(或者我可以获得用于 GMP 的 win7 64bit 的预构建二进制文件)。
我尝试过编译 GMP 和 MPIR 以及其他项目但都失败了,它们都没有处理各种令人沮丧和模棱两可的错误。不幸的是,时间压力越来越大,如果我可以构建/下载库,我需要实现的东西很简单。
我需要浮点支持,所以一个 bigint 库是不够的。
谢谢,
php - 在 32 位 PHP 中处理大整数
我有一门课来计算一个数字的 Luhn 校验和。它将整数作为输入并返回 true 或 false 以指示有效性或其他情况,或者如果输入的数据类型不合适,则会引发异常。
代码如下(完整源码在GitHub 上):
我还建立了一个完整的单元测试来练习课程。
我的主要开发环境是在 OSX Lion 下运行 64 位构建 PHP 5.3 和 Apache 的工作站。我还使用一台运行 64 位版本的 Apache 和 PHP 5.4 的笔记本电脑,也在 Apache 下运行。除此之外,我还有一个运行 64 位 Apache 和 PHP 5.3 的 Ubuntu Linux 虚拟机。正如预期的那样,单元测试对所有这些都很好。
我以为我可以在工作午餐期间(Windows 7、XAMPP、32 位 PHP 5.3)有一些空闲时间来处理这个类所属的项目,但我遇到的第一件事是单元测试失败。
问题是,在 PHP 的 32 位构建中,如果数字超过 32 位整数的限制,则该数字会被静默地转换为浮点数。我提出的解决方案是为浮动设置一个特殊情况。如果输入类型是浮点数,并且它的值超出了可以用 int (PHP_INT_MIN .. PHP_INT_MAX) 表示的范围,那么我将对其进行 number_format() 以将其恢复为一串数字。如果它在整数范围内,那么我将抛出异常。
然而,这导致了它自己的问题。我知道,浮点数离 0 越远,数字的分辨率越低(给定数字和下一个可表示数字之间的增量越小)。在你不能再可靠地表示整数部分之前,你必须离 0 多远才能表示数字的整数部分?(我不确定这是否真的很清楚,例如,在分辨率下降到一个 int 和下一个 int 之间的差异之前,限制是 1000。我可以输入一个大于 1000 的数字,比如 1001,但是限制浮点数意味着它最终是 1001.9,四舍五入得到 1002,这意味着我失去了我感兴趣的值)。
是否有可能检测到分辨率的损失何时会成为浮点数的问题?
编辑添加:我想我可以修改扩展名以接受字符串而不是数字类型,然后验证它是否仅包含使用正则表达式或其他类似技术的数字,但由于 Luhn-checkable 数据是一串数字不知何故,我觉得不对劲。有一些 PHP 扩展可以处理 bignums,但由于它们是扩展,并且这意味着它是一段可能部署在各种配置上的框架代码,我宁愿不依赖这样的存在尽可能扩展。此外,以上都没有解决如果你给 PHP 一个大的 int 它会默默地将它转换为 float 的问题。我需要一种检测这种情况发生的方法。
c - Inconsistent summation in C
When I run the following program:
I obtain the following response for these values:
where I have increased the variable 'amount' by 1 in each case.
- In the first one, the summation gives what I expect.
- In the second, it surprisingly gives the same value.
- In the third, it goes on summing.
Why does this happen?
Although the code doesn't seem to be very useful, I have just written the part in question. I actually wanted to use it in a larger program.
Thanks!
python - Matlab的交换错误
和有什么区别
返回 false,而
返回真?这也适用于 Python。
matlab - matlab:改变矩阵
我有一个加载单元格数组并将它们转换为矩阵的代码。现在这个矩阵在浮点数之后显示 4 个数字,例如
如何将所有行更改为仅在浮点后显示 2 个数字?请考虑我想更改矩阵而不是在命令窗口中打印它!
java - 从 double 中减去 double 后精度损失
可能的重复:
在 java 中使用 Doubles 保持精度
好的,所以我有以下代码块:
现在,zoom 变量是 double 类型,最初设置为 1。所以,我希望结果类似于 1 - .05 = .95; .95 - .05 = .9;.9 - .05 = .85;等等。但当我打印结果时,情况似乎并非如此,如下所示:
- 0.95
- 0.8999999999999999
- 0.8499999999999999
- 0.7999999999999998
- 0.7499999999999998
- 0.6999999999999997
希望有人能够清楚地解释。我搜索了互联网,当我们以二进制形式存储浮点数时,我读到它与一些限制有关,但我仍然不太明白。解决我的问题并不重要,但我想了解这种行为。
matlab - Matlab - “0:.1:1”意外的精度行为
可能重复:
Matlab 给出错误答案
0:.1:1
当我使用-range 函数时,谁能向我解释为什么会发生以下情况?
为什么 vecA(4) 不等于 0.3?它们看起来完全一样;)
我认为这里的精度有问题吗?还是我的理解有问题?
javascript - JavaScript 中的 parseDecimal?
我正在进行一些 JS 计算。由于浮点运算通常使用数字的近似值而不是精确值,因此如果将这些浮点数四舍五入到固定精度,您通常会得到细微的差异。当你处理美元时,人们不喜欢这些细微的差别。
这个jsfiddle概述了我的问题:http: //jsfiddle.net/rGP8Q/。
有谁知道我如何在不引入来自浮点近似的这些舍入误差的情况下进行数学运算(乘法和加法)?
编辑
我发现另一个帖子提出了同样的问题,并确认 JS 没有内置的十进制数据类型:如何处理 JavaScript 中的浮点数精度?.
你可以看看你的JS终端是否
这是不一致的。我们需要一个真正的十进制数据类型。