问题标签 [epsilon]

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 投票
1 回答
424 浏览

floating-point - Double中的Double Machine epsilon和Double的最小值

我对浮点数的机器 epsilon 有一个幼稚的问题。

众所周知,双精度浮点数的机器 epsilon 约为 10^-16,而浮点数的最小严格正值可以小至 10^{-300}。既然机器epsilon是相对误差的上限,那么使用这个比机器epsilon小很多的数字10^{-300}有什么意义呢?

我一定对浮点表示有误解。你能澄清一下吗?

0 投票
2 回答
778 浏览

ios - 目标 C:安全浮点比较奇怪地失败了

我写了一段代码,遇到了一个非常奇怪的问题。NO即使实际比较为真,两个浮点数之间的比较也会返回。我什至通过比较来使用安全浮点比较FLT_EPSILON。这是代码:

并且比较总是会失败,并且代码会进入无限循环。我已经在 iOS 7 上的 32 位设备和 iOS 8 上的 iPhone 5S 模拟器上对此进行了测试。

0 投票
1 回答
1942 浏览

fortran - 在fortran中确定机器epsilon

如何在 FORTRAN 90 中编写一个程序来确定任何计算机中的机器 epsilon?

0 投票
2 回答
298 浏览

c - 确定浮点变量的当前精度/epsilon

我试图将两个相等价值的双打分开最小数量。上下文是一个事件模拟。我不希望事件同时发生,因此我将设置为发生新事件的时间增加了最小量。

(这很烦人(自我实现的 RNG),所以我实际上需要进行调查,直到找到没有事件发生的时间。)

目前,我的代码想做这样的事情(未经测试,视为伪代码):

现在有很多问题,但我想以某种方式摆脱中间的while循环。我的大部分时间甚至都没有接近双浮点可以聚集的最大精度,所以假设他们这样做是浪费时间,而且因为我的 RNG 不是特别随机,这个循环必须执行得相当频繁地。

有没有办法(1)直接增加双浮点变量的小数部分,或者(2)找出给定浮点变量 x 在小于 O(log(x)) 时的精确度?

0 投票
1 回答
99 浏览

c++ - 在 cout 和 printf 中打印零的区别

结果是

同时与

结果是

再次,如果我改变

结果是

为什么这种不同的行为只是简单地反转总和?为什么 2.77556e-17?它是机器 epsilon?为什么我得到它而不是零?

0 投票
4 回答
2463 浏览

c# - 为什么将 double.epsilon 添加到一个值会产生相同的值,完全相等?

我有一个单元测试,测试边界:

我以为我会通过向其添加最小可能的正双精度来将 90.0 倾斜到边缘,但现在没有抛出异常,知道为什么吗?

调试时,我看到 top 以 90 的形式出现,而它应该是 90.00000000.... 的东西。

编辑: 我应该更努力地思考一下,90+Double.Epsilon会失去它的分辨率。似乎最好的方法是做一些位移。

解决方案:

这可以完成工作。

0 投票
3 回答
18136 浏览

matlab - 如何在 MATLAB 中计算机器 epsilon?

我需要找到机器 epsilon,我正在执行以下操作:

但是,它向我展示了这一点:

我应该怎么办?

0 投票
1 回答
369 浏览

c++ - 机器 Epsilon 精度差异

作为学校作业的一部分,我正在尝试计算 C++ 中双精度和浮点数的机器 epsilon 值。我在 Windows 7 64 位中使用 Cygwin,代码如下:

当我运行代码时,我收到两个值的 1.0842e-019。我查了一下,双精度值应该是 2.22e-16,浮点值应该是 1.19e-07。当我在 Macbook 上运行完全相同的代码时,代码会返回正确的值。什么可能导致我的 Windows 机器上的差异?

0 投票
2 回答
2792 浏览

java - Java:双机ε不是最小的x,使得1 + x!= 1?

我试图确定 Java 中的double 机器 epsilon,使用它的定义是最小的可表示doublex1.0 + x != 1.0就像在 C/C++ 中一样。根据维基百科,这台机器 epsilon 等于2^-52(52 是double尾数位数 - 1)。

我的实现使用该Math.ulp()功能:

结果是我所期望的:

到目前为止,一切都很好。但是,如果我检查给定eps的值确实是最小 x1.0 + x != 1.0,那么似乎有一个更小的值,也就是 double根据Math.nextAfter()

产生:

正如我们所看到的,我们有一个小于机器的 epsilon,它加到 1 后得到的不是 1,这与定义相矛盾。

那么根据这个定义,机器 epsilon 的普遍接受值有什么问题呢?还是我错过了什么?我怀疑浮点数学的另一个深奥方面,但我看不出我哪里出错了......

编辑:感谢评论者,我终于明白了。我实际上使用了错误的定义!eps = Math.ulp(1.0)计算到最小可表示的 double > 的距离1.0,但是——这就是关键——这不是eps最小的,而是该值的两倍:加法四舍五入.x1.0 + x != 1.01.0 + Math.nextAfter(eps/2)1.0 + eps

0 投票
6 回答
2784 浏览

python - Python epsilon 不是最小的数

返回什么sys.float_info.epsilon

在我的系统上,我得到:

这怎么可能?

编辑:

你没关系,我认为 epsilon 做了 min 所做的事情。所以我的意思是sys.float_info.min

编辑2

每个人,尤其是 John Kugelman,感谢您的回答!

我做了一些玩耍来向自己澄清一些事情:

所以epsilon * min给出具有最小正有效数(或尾数)和最小指数的数字。