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

c# - .NET Math.Log10() 在不同的机器上表现不同

我发现正在运行

-324在机器 A 上返回,但将-Infinity在机器 B 上返回。

他们最初的行为方式与返回相同-324

两台机器一开始都使用相同的操作系统 (WinXP SP3) 和 .NET 版本 (3.5 SP1)。机器 B 上可能有 Windows 更新,但除此之外没有发生任何更改。

什么可以解释行为上的差异?

评论中讨论的更多细节:

  • 机器 A CPU 是 32 位 Intel Core Duo T2500 2 GHz
  • 机器 B CPU 是 32 位 Intel P4 2.4 GHz
  • 从使用多个第 3 方组件的大型应用程序中运行的代码收集的结果。但是,两台机器上都运行相同的 .exe 和组件版本。
  • 在机器 B 上打印Math.Log10(double.Epsilon)一个简单的控制台应用程序-324,而不是-Infinity
  • 两台机器上的 FPU 控制字总是0x9001F(用 读取_controlfp())。

更新:最后一点(FPU 控制字)不再正确:使用较新版本的 _controlfp() 显示不同的控制字,这解释了不一致的行为。(有关详细信息,请参阅下面 rsbarro 的答案。)

0 投票
1 回答
2656 浏览

visual-studio-2008 - Visual Studio 中的浮点处理有问题?

终于有更新啦!

我有一个小故事。

我想在 MS Visual Studio 2008 编译的 C 程序(在 64 位 PC 上的 Windows 7 上运行)中计算机器 epsilon(满足条件 1.0 + epsilon = 1.0 的最大 epsilon > 0)。因为我知道 double 和 float 具有不同的精度,所以我想看看两者的答案。出于这个原因,我构建了以下程序:

我很惊讶地看到它对 double 类型和 float 类型给出了相同的答案:2.22045e-16。这很奇怪,因为 double 占用的内存是 float 的两倍,而且应该更精确。之后我查看了维基百科并从那里获取了一个示例代码:

当它正常工作时,我更加惊讶!在尝试了解这两个程序之间的根本区别后,我发现了以下事实:如果我将循环条件更改为

嗯,你会说这是一个谜。哦,真正的谜团如下。相比:

它给出了正确的答案(1.19209e-07)和

它给出的答案对于浮点数不正确,对于双精度数(2.22045e-16)是正确的。

事实上这是完全错误的,结果应该是相反的。这是因为默认情况下,像 1.0 这样的常量被编译器视为双精度(根据标准),如果它存在于算术表达式中,则所有其他操作数都被提升为双精度。相反,当我写 1.0f 时,所有操作数都是浮点数,不应该进行任何提升。然而我得到了完全不同的结果。

在所有这些测试之后,我尝试使用 gcc 在 Linux 上编译运行程序。毫不奇怪,它完全符合我的预期(正确答案)。所以我现在猜测这是 Visual Studio 的错误。为了逗大家笑(如果还有人看过我的帖子,那还有什么值得怀疑的^_^)我再给大家做个对比:

这在VS中不能正常工作,但是......

给出 1.19209e-07 的正确答案。

请有人告诉我问题的根源是否是错误的 VS 2008 编译器是否正确(您能确认您机器上的错误吗?)。如果您在较新版本中测试此案例,我也将不胜感激:MS VS 2010。谢谢。

更新。 使用 MS Visual Studio 2013,我提到的第一个程序没有意外结果——它为 float 和 double 提供了适当的答案。我用所有浮点模型(精确、严格和快速)检查了这一点,没有任何改变。因此,在这种情况下,VS 2008 似乎确实存在问题。

0 投票
2 回答
333 浏览

c++ - 浮点数错误。c++怎么知道0.99999982是1?

我标准化了一个向量,它的长度应该是1。但是长度方法的结果是0.99999982

我不知道这是对还是错。但是如果我打印出来,结果是 1。不是 0.99999982(由 cout 打印)

但是 std::cout 怎么知道它是 1 呢?[这是我的第一个问题]

另一个问题是为什么比较函数的结果是错误的。

我有一个如下的比较方法。而 lhs 是向量的长度,而 rhs 只是 1。

return (fabsf(rhs-lhs) <= FLT_EPSILON) ? true : false;

这种方法的结果是假的。

归一化向量的长度是否已经错误地被认为是归一化的?还是 epsilon 太小?

我做错了什么?

0 投票
6 回答
2415 浏览

python - 变化列表的最后 1000 个值的最小值和最大值

我正在创建一个迭代算法(蒙特卡洛方法)。该算法在每次迭代时都会返回一个值,从而创建一个值流。

我需要分析这些值并在说1000返回值有一些时停止算法epsilon

我决定实现它计算最后一个值的max和值,然后使用这个公式计算并将它与:进行比较。如果达到此条件,则停止迭代并返回结果。min1000error(max-min)/minepsilonerror<=epsilon

  1. 第一个愚蠢的想法是对它使用 alistappend新值,在每次附加后计算它的最后一个值的max和值。min1000

  2. 1000然后我决定保留更多的最后一个值是没有用的。于是我想起了dequedeque这是一个非常好的主意,因为在对象两端添加和删除的复杂性是O(1). 但它并没有解决每次迭代都需要遍历所有最后 1000 个值来计算min和的问题max

  3. 然后我记得有heapq模块。它以这样一种方式保存数据,以便在每一刻都有效地返回最小的一个。但我需要最小的和最大的。此外,我需要保留元素的顺序,以便我可以保留1000算法的最后返回元素,我不知道如何使用heapq.

考虑到所有这些想法,我决定在这里问:

我怎样才能最有效地解决这个任务?

0 投票
2 回答
163 浏览

java - Java Test Number for its precision


I have to write a method, that calculates the ArcTan without using Math.atan()
My algorythm is working, but it isn't stoping.

After 23 loops my algorythm has calculated nearly the same arcTan as Math.atan() but my while isn't stopping.
How do i specyfy the stop-condition the right way?

For better unterstanding see the output of my loop:

The 1st column is my counter variable n
The 2nd column is my calculated arcTan - you see it isn't getting more precise after loop 23
The 3rd column is my Epsilon

How Do I check if my 2nd column has the precison specified in 3rd column?

0 投票
3 回答
1851 浏览

floating-point - 机器精度估计

有人说双精度浮点数的机器 epsilon 是 2^-53,而其他人(更常见)说它的 2^-52。我已经搞砸了使用除 1 之外的整数和从上方和下方接近(在 matlab 中)来估计机器精度,并且得到了两个值作为结果。为什么在实践中可以观察到这两个值?我认为它应该总是在 2^-52 左右产生一个 epsilon。

0 投票
3 回答
11147 浏览

excel - 在 Microsoft Excel 中获取机器 epsilon

这似乎是一个更好地针对具有一定编程经验的人而不是普通 Excel 用户的问题,因此我在这里询问而不是超级用户。

有没有办法,最好是通过一个函数,来返回 epsilon(即 Excel 计算中可表示的最小非零数)?如果它不能通过函数检索,是否有一种通过紧凑函数快速计算它的方法?

需要明确的是,我不是在寻找基于 VBA 的解决方案,我想要一个不需要运行宏的基于 Excel 公式/电子表格的解决方案。

我在网上的搜索大多是关于如何显示符号 Epsilon 的讨论。

谢谢。

0 投票
4 回答
98396 浏览

python - Python 中 epsilon 的值

Python 中的 epsilon 是否有标准值(或获取方法)?我需要比较浮点值并希望与可能的最小差异进行比较。

在 C++ 中,提供了一个函数,numeric_limits::epsilon( )它为任何给定的数据类型提供 epsilon 值。Python中是否有等价物?

0 投票
3 回答
7235 浏览

matlab - 在matlab中计算具有非常小的值的函数

我正在 matlab 中创建一个函数来计算以下函数:

在此处输入图像描述

对于这个功能,我们有:

在此处输入图像描述

这是我在matlab中的函数实现:

当我用非常小的值测试函数时,函数的极限确实是 1,但是当数字非常小时(例如 1*e-20)时,极限会变为零吗?这种现象的解释是什么?难道我做错了什么?。

0 投票
4 回答
405 浏览

c++ - 如何通过另一个变量的相对值来确定一个变量?

我正在为我目前正在使用 Arduino 构建的机器人实施 PID 控制算法。

我的问题更多与编程逻辑有关。

我必须计算一个变量,一个错误,int eps。这个 eps 将介于 -7 和 +7 之间。

从机器人中,我以双精度形式获取输入,其值在 0 到 7000 之间。

我的算法必须像这样工作:

等等...

换句话说,我必须为 eps 分配一个值,该值将由输入包含在哪个间隔中确定。

我的问题是什么是最有效、最节省时间和最节省资源的方式?

我使用的是 Arduino 和他们自己的 IDE,而不是 Eclipse。