- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我只是在玩手动计算 R 中 e
的值,我注意到一些让我有点不安的事情。
e
的值使用 R 的 exp()
命令...
exp(1)
#[1] 2.718282
现在,我将尝试使用 x = 10000
x <- 10000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718146
不完全是,但我们会尝试使用 x = 100000
x <- 100000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718268
比较暖和,但还是有点偏...
x <- 1000000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.71828
现在,让我们用一个巨大的来试试吧
x <- 5000000000000000
y <- (1 + (1 / x)) ^ x
y
#[1] 3.035035
嗯,这是不对的。这里发生了什么?我是否溢出了数据类型并需要使用某个包来代替?如果是这样,当您溢出数据类型时是否没有警告?
最佳答案
您的机器精度有问题。尽快(1 / x) < 2.22e-16
, 1 + (1 / x)
只是 1。数学极限在有限精度数值计算中被打破。您的最终 x
问题中已经是5e+15
,非常接近这个边缘。试试 x <- x * 10
,以及您的 y
将是 1
.
这既不是“溢出”也不是“下溢”,因为表示像 1e-308
这样小的数字并不困难。 .这是浮点运算过程中丢失有效数字的问题。当你这样做 1 + (1 / x)
, 越大 x
是,(1 / x)
中的有效数字较少。部分加到 1 时可以保留,最终丢失 (1 / x)
完全术语。
## valid 16 significant digits
1 + 1.23e-01 = 1.123000000000000|
1 + 1.23e-02 = 1.012300000000000|
... ...
1 + 1.23e-15 = 1.000000000000001|
1 + 1.23e-16 = 1.000000000000000|
任何数值分析书都会告诉你以下内容。
a + b = a * (1 + b / a)
, 如果 b / a < 2.22e-16
, 那里有我们 a + b = a
.这意味着当将多个正数相加时,将它们从最小到最大累加更稳定。还建议您阅读 Approximation to constant "pi" does not get any better after 50 iterations ,在您提出问题几天后提出的问题。使用 series近似一个无理数在数值上是稳定的,因为您不会在问题中看到荒谬的行为。但是有效有效数字的有限数量带来了一个不同的问题:数值收敛,也就是说,您只能将目标值逼近到一定数量的有效数字。 MichaelChirico's answer使用泰勒级数将在 19 项后收敛,因为 1 / factorial(19)
加到 1 时已经是数字 0。
float 之间的乘法/除法不会导致有效数字出现问题;它们可能会导致“溢出”或“下溢”。但是,鉴于可表示的浮点值范围很广(1e-308 ~ 1e+307),“上溢”和“下溢”应该很少见。真正的困难在于加法/减法,其中有效数字很容易丢失。见 Can I stably invert a Vandermonde matrix with many small values in R?有关矩阵计算的示例。获得更高的精度并非不可能,但工作可能更复杂。例如,矩阵示例的 OP 最终使用了 GMP (GNU Multiple Precision Arithmetic Library)和相关的 R 包继续:How to put Rmpfr values into a function in R?
关于R:当 `e = exp(1)` 很大时,使用 `(1 + 1/n) ^ n` 近似 `n` 会产生荒谬的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51624794/
如果我在 sympy 中使用 simplify() 函数,log((exp(x)+1)/exp(x)) 会简化为 log (1+exp(-x)),但是,当我阅读文档时,简化函数“可能会不必要地慢”,我
我正在创建一个 Validator类(class)。我正在尝试实现 Linq SelectMany我的验证器的扩展方法能够使用 Linq 查询组合表达式并验证最终结果,即使基础值发生变化也是如此。 下
我正在尝试编写一个程序来计算 exp(-x) 和 exp(x) 的泰勒级数最多 200 次迭代,对于大 x。 (exp(x)=1+x+x^2/2+...). 我的程序非常简单,看起来应该可以完美运行。
我正在看书,看到这段代码: public Animal getWinner(List animals) { return animals == null || animals.size() =
我正在将脚本从 matlab 复制到 C++ 函数中。但是,对于 exp 函数,我不断得到不同的结果。例如,以下片段: std::complex final_b = std::exp(std::com
我不太了解 Python,但下面的代码片段结果是 0.367879441171 from math import exp window = 10000 td = 1 print exp(-td/win
为什么/何时使用其中一种?我刚刚遇到了一个问题,我在使用一个时收到警告,而在使用另一个时没有警告。 例子: tableView.tableHeaderView = label; // worked [
这个问题在这里已经有了答案: java.lang.Math.log replaced by intrinsic call, why not java.lang.Math.exp()? (1 个回答)
我正在将一些 Python 代码转换为 C 代码。 下面的复数输出上的 Python NumPy exp (6.12323399574e-17-1j) 为 k=1、l=4。 numpy.exp(-2.
我正在尝试学习或生成任何代码来学习字符串day("26.02.2009") --->给我“星期三” 我需要C#中的静态datefunction。 例如: datetime Str_day= Retur
[编辑:整个事情有一个非常简单的解决方案:矩阵使用单数据类型而不是默认的双数据类型] 我刚刚注意到 matlab 中的一个有点奇怪的(我认为)行为,想知道是什么导致了它。我有一个 10000x500
我创建了一个运行良好的网站,但我想添加干净的 url,如 exp.com/sec1 而不是 exp.com/#sec1,我有点用 History.pushState 实现了它,但是当有人重新加载链接将
我目前正在听一个关于自动语音识别 (ASR) 的讲座。最后一讲是关于矢量量化(VQ)和k最近邻(kNN)以及二叉树和高斯混合模型(GMMs)。 据讲师介绍,VQ只是通过计算GMM的一个近似值来加速GM
在 oracle 中,我们有 exp效用。我们将其用作 exp username/password@database .这里我们可以使用提供主机和端口详细信息来导出到远程数据库表吗?如果是,提供这些的
如何使用 at-exp 来包含 blew 原始字符串: package foo } import ( 我是这样写的,但是不能包含“}”字符: #lang at-exp racket/base
我试图了解 http://gruntthepeon.free.fr/ssemath/sse_mathfun.h 中 exp_ps() 的实现或 http://software-lisc.fbk.eu/
我正在使用模板类 ( Pol ) 来计算多项式,并希望使用成员函数 ( .exp() ) 将多项式 P 转换为其指数 e^P。 重载指数函数工作正常,编译器选择原始指数 exp(double)如果T
在python中,我们说万物皆对象, 例如:表达式x
您认为可以使用多个线程来计算指数函数吗?我有一个代码,瓶颈是 long double expl( long double ) 的计算。所有其余的都已经并行化了。我尝试了几种近似值,但到目前为止没有任何
我正在尝试将 exp(x) 函数扩展为泰勒级数。这是代码: double CalcExp(){ double eps = 0.0000000000000000001; double elem = 1.
我是一名优秀的程序员,十分优秀!