问题标签 [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.
floating-point - Double中的Double Machine epsilon和Double的最小值
我对浮点数的机器 epsilon 有一个幼稚的问题。
众所周知,双精度浮点数的机器 epsilon 约为 10^-16,而浮点数的最小严格正值可以小至 10^{-300}。既然机器epsilon是相对误差的上限,那么使用这个比机器epsilon小很多的数字10^{-300}有什么意义呢?
我一定对浮点表示有误解。你能澄清一下吗?
ios - 目标 C:安全浮点比较奇怪地失败了
我写了一段代码,遇到了一个非常奇怪的问题。NO
即使实际比较为真,两个浮点数之间的比较也会返回。我什至通过比较来使用安全浮点比较FLT_EPSILON
。这是代码:
并且比较总是会失败,并且代码会进入无限循环。我已经在 iOS 7 上的 32 位设备和 iOS 8 上的 iPhone 5S 模拟器上对此进行了测试。
fortran - 在fortran中确定机器epsilon
如何在 FORTRAN 90 中编写一个程序来确定任何计算机中的机器 epsilon?
c - 确定浮点变量的当前精度/epsilon
我试图将两个相等价值的双打分开最小数量。上下文是一个事件模拟。我不希望事件同时发生,因此我将设置为发生新事件的时间增加了最小量。
(这很烦人(自我实现的 RNG),所以我实际上需要进行调查,直到找到没有事件发生的时间。)
目前,我的代码想做这样的事情(未经测试,视为伪代码):
现在有很多问题,但我想以某种方式摆脱中间的while循环。我的大部分时间甚至都没有接近双浮点可以聚集的最大精度,所以假设他们这样做是浪费时间,而且因为我的 RNG 不是特别随机,这个循环必须执行得相当频繁地。
有没有办法(1)直接增加双浮点变量的小数部分,或者(2)找出给定浮点变量 x 在小于 O(log(x)) 时的精确度?
c++ - 在 cout 和 printf 中打印零的区别
和
结果是
同时与
结果是
再次,如果我改变
结果是
为什么这种不同的行为只是简单地反转总和?为什么 2.77556e-17?它是机器 epsilon?为什么我得到它而不是零?
c# - 为什么将 double.epsilon 添加到一个值会产生相同的值,完全相等?
我有一个单元测试,测试边界:
我以为我会通过向其添加最小可能的正双精度来将 90.0 倾斜到边缘,但现在没有抛出异常,知道为什么吗?
调试时,我看到 top 以 90 的形式出现,而它应该是 90.00000000.... 的东西。
编辑:
我应该更努力地思考一下,90+Double.Epsilon
会失去它的分辨率。似乎最好的方法是做一些位移。
解决方案:
这可以完成工作。
matlab - 如何在 MATLAB 中计算机器 epsilon?
我需要找到机器 epsilon,我正在执行以下操作:
但是,它向我展示了这一点:
我应该怎么办?
c++ - 机器 Epsilon 精度差异
作为学校作业的一部分,我正在尝试计算 C++ 中双精度和浮点数的机器 epsilon 值。我在 Windows 7 64 位中使用 Cygwin,代码如下:
当我运行代码时,我收到两个值的 1.0842e-019。我查了一下,双精度值应该是 2.22e-16,浮点值应该是 1.19e-07。当我在 Macbook 上运行完全相同的代码时,代码会返回正确的值。什么可能导致我的 Windows 机器上的差异?
java - Java:双机ε不是最小的x,使得1 + x!= 1?
我试图确定 Java 中的double
机器 epsilon,使用它的定义是最小的可表示double
值x
,1.0 + x != 1.0
就像在 C/C++ 中一样。根据维基百科,这台机器 epsilon 等于2^-52
(52 是double
尾数位数 - 1)。
我的实现使用该Math.ulp()
功能:
结果是我所期望的:
到目前为止,一切都很好。但是,如果我检查给定eps
的值确实是最小 x
的1.0 + x != 1.0
,那么似乎有一个更小的值,也就是 double
根据Math.nextAfter()
:
产生:
正如我们所看到的,我们有一个小于机器的 epsilon,它加到 1 后得到的不是 1,这与定义相矛盾。
那么根据这个定义,机器 epsilon 的普遍接受值有什么问题呢?还是我错过了什么?我怀疑浮点数学的另一个深奥方面,但我看不出我哪里出错了......
编辑:感谢评论者,我终于明白了。我实际上使用了错误的定义!eps = Math.ulp(1.0)
计算到最小可表示的 double > 的距离1.0
,但是——这就是关键——这不是eps
最小的,而是该值的两倍:加法四舍五入到.x
1.0 + x != 1.0
1.0 + Math.nextAfter(eps/2)
1.0 + eps
python - Python epsilon 不是最小的数
返回什么sys.float_info.epsilon
?
在我的系统上,我得到:
这怎么可能?
编辑:
你没关系,我认为 epsilon 做了 min 所做的事情。所以我的意思是sys.float_info.min
。
编辑2
每个人,尤其是 John Kugelman,感谢您的回答!
我做了一些玩耍来向自己澄清一些事情:
所以epsilon * min
给出具有最小正有效数(或尾数)和最小指数的数字。