背景

​ 昨晚我在看一本书,叫《数学极客》,看到第六章《e:不自然的自然数》,这个数最早开始接触应该是高一的时候,那时候问老师,这个数是怎么来的,老实说,和圆周率一样,是一个常数,然后就没有然后了,后面这个问题就随着我的好奇心一起沉睡了,直到昨晚这个尘封许久的问题又一次浮上我的心头,庆幸的是这次我有了打破砂锅问到底的想法和行动。特意写下这篇文章纪念这一次探索之旅。

e是怎么来的?

​ 这个数其实来源于1683年瑞士数学家雅各布·伯努利以及他所研究的复利问题。复利问题是这样的,如果你有a元,存进银行里,银行一年之后付你100%的利息,那么你一年之后能拿到的钱就是:

\[y = a(1 + 1)
\]

但是现在要是银行改变策略了,变成半年付一次利息,并且一次利息为50%,那么一年后你能拿到多少呢?是下面这个数:

\[y = a(1 +\frac{1}{2})^2
\]

其实很明显我们可以看出来,分的份数越多可以拿到的更多,因为下一次结算利息是以上一次发放的本金加上利息作为本金计算出来的。那么自然而然,我们会好奇,要是把一年的时间分成无穷大份,我们一年之后能得到多少?这个计算也简单嘛。就是下面这个式子:

\[y = a\lim_{n\rightarrow+\infty}(1 + \frac{1}{n})^n
\]

我们看这个式子,其实a是常数,也就是我们的原始本金,不需要纳入讨论的范畴,我们关键还是看后面的部分。当n趋于无穷的时候后面这个1+1/n的n次方代表着我们这笔钱能翻几倍。伯努利发现这个数趋近无穷大的时候,这个数会毕竟一个小数,也就是我们熟知的2.718。

​ 这个2.718是怎么算的呢?我们可以把e^x用泰勒公式展开:

​ 当f(x)是e^x的时候代入进去:

当x是1的时候也就是我们要计算的e的值:

​ 一开始这个数还不叫e,他叫b。后来欧拉出现了,他觉得呀,你这个式子趋近于一个常数,是好事情,但是你一开始的假设他的一年后翻一倍,后面也是基于这个假设,把一年分成若干份,每次发放的利息是若干份之一,这个结论不够一般化,所以把这个东西推广了一下。一年之后的利息总是x。就变成了下面这个式子:

\[a\lim_{n\rightarrow+\infty}(1 + \frac{x}{n})^n
\]

可以看出来,这个式子其实就变成了关于x的函数了,一般在数学上表示一个关于x的函数都是用f(x), 但是这里欧啦用了exp(x)来表示, exp就是指数的意思。也就是:

\[exp(x) = a\lim_{n\rightarrow+\infty}(1 + \frac{x}{n})^n
\]

这个也就是指数函数最开始的定义。到这里就会有人问了,指数不是y=a^x这种形式嘛。其实你这样看,就豁然开朗了:

\[exp(x) = a\lim_{n\rightarrow+\infty}((1 + (\frac{x}{n})^\frac{n}{x})^x
\]

上面这两个式子其实是等价的,就是稍微操作了一下。n除x,在外面又乘x。但是这里你仔细观察

\[\lim_{n\rightarrow+\infty}(1 + (\frac{x}{n})^\frac{n}{x}
\]

这个不就是上面伯努利一开始发现的常数2.718嘛。所以exp(x)最后可以写成:

\[exp(x) = e ^x
\]

这也就是指数函数最早的由来,e也是从这里来的,所以e也叫欧拉常数。这个式子的意义是说,通过不断结算的方式追求到的复利也是有极限的,他的极限就是e^x倍。x指年利率。

计算机为什么是二进制?

​ 乍一看这个问题很突兀,为什么计算机是二进制,一般这个问题的答案都是因为电荷只有正电荷和负电荷,所以计算机里面一个电子元器件只能表示两种状态,然后就用二进制了。但是你有没有想过,如果我把好几个电子元器件捆绑在一块,比如我捆绑三个元器件,这样这三个元器件就可以表示0到7的数,这样咱们直接搞个8进制不也可以嘛?这里就涉及到信息表示效率了,信息的表示效率指的是能表示的信息量于表示这个信息量所需要的资源的比值。比如举2进制的例子来说,现在要表示0到7这个数据量,那么我们用3个二进制单元就可以表示完了。所以我们站在数学的角度推广这个结论,就是我们要表示m个数,那么在二进制下面要用n个二进制单元去表示,也就是

\[m = 2 ^n
\]

那么在二进制下面要表示那么多数需要多少种状态呢,每个比特位就是两种状态嘛。所以一共需要:

\[s = 2n
\]

那么这个时候我们把这个结论推广成x进制,看看谁的效率是最高的。m个数要是在x进制下面表示就就是:

\[m = x ^ n
\]

那么他需要的资源就是

\[s = xn
\]

那么这里我们讨论的就应该是在表示相同数据量m的时候,那个进制,也就是x的值,会使得s是最小的。这样子就最省资源了,这就是效率最高的做法。那么我们把这两个式子联合起来计算,从第一个式子中得到

\[n = \frac{lnm}{lnx}
\]

代入到第二个式子就会得到:

\[s = lnm * \frac{r}{lnr}
\]

m是常数,所以这个式子什么时候最小取决于r/lnr什么时候最小。这个就比较好做了,对这个式子进行求导会发现这个式子在r取e的时候会取得最小值。所以理论上来说e进制效率是最高的,e的取值是2.718所以理论上来说三进制应该比二进制更高效。但是不好实现,实在没有合适的运算逻辑和简易的实现方式。所以选择了二进制。后来也有人研究三进制,但是等他们优化了三进制的逻辑运算之后,二进制的计算机已经普及了,当你要起跑的时候你的对手已经跑的没影了。。。不过后面三进制有没有弯道超车的机会也未可知,这也是科技的魅力。。

总结

​ 其实写下这篇文章也是机缘巧合,也不知道为什么可以看书看着看着就兴冲冲的研究起来。但是在内心中还是为学到了东西而感到快乐的,希望把这份快乐也传递给你。另外也推荐《数学极客》这本书给你,个人感觉写的蛮不错的。

参考资料

个人推广

​ 下面是笔者的公众号,希望兄弟们可以多多关注,感谢您的支持啦~

自然常数e的由来以及计算机为什么是二进制的更多相关文章

  1. 关于自然常数e的理解

    关于自然常数\(e\)的理解 By Z.H. Fu 切问录 ( http://www.fuzihao.org ) 利息增长模型 在上中学学习对数的时候,我们就学到了一个叫做e的东西(\(e\appro ...

  2. 我们数学中常用的自然常数e代表什么?看完长知识了!

    我们在学习期间都接触过自然常数e,也知道e ≍ 2.718,学过极限的同学应该也知道 那么大家知道e的含义是什么吗?为啥叫“自然常数”? e的含义可以用一个计算利息的例子来解释. 假如你有1块钱,银行 ...

  3. 自然常数e的含义

    e是一个重要的常数,但是它的直观含义却不像 π 那么明了.我们都知道,圆的周长与直径之比是一个常数,这个常数被称为圆周率,记作 π = 3.14159......可是e代表什么呢? e是“指数”(ex ...

  4. Python的学习之-计算机编码和二进制

    bit位,计算机中最小的表示单位 8bit = 1bytes字节,最小的储存单位,1bytes缩写为1b 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 102 ...

  5. Hadoop源代码点滴-自然常数e

    数学里的 e 为什么叫做自然底数?是不是自然界里什么东西恰好是 e? https://www.zhihu.com/question/20296247

  6. 自然常数e的神奇之美

  7. 自然常数 e 的理解与应用

    某彩票中奖率是百万分之一,则一个人买一百万张彩票仍不中奖的概率是: (1−1106)106≈1e e 往往出现在: 许多微小事件带来的总体变化 随机性和无穷多:

  8. java--字符编码,正则表达式

    转载请申明出处:http://blog.csdn.net/xmxkf day21   字符编码 06-IO流(转换流的字符编码) 字符编码: 1. 字符流的出现为了方便操作字符,更重要的是加入了编码转 ...

  9. Java面向对象 IO (四)

     Java面向对象  IO  (四) 知识概要:                 (1)打印流 (2)序列流 SequenceInputStream (3)ObjectInputStream与Ob ...

随机推荐

  1. java连接mysql8.0.28数据库实例

    首先说明,由于是8版本的数据库,所以配置类的写法上与5版本的有所区别,需要注意,同时用idea或eclipse时需要导入jar包,jar包的下载链接: https://dev.mysql.com/ge ...

  2. 3.Docker容器学习之新手基础使用

    原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...

  3. 安卓记账本开发学习day1

    学习了一些简单的布局与界面设计

  4. Java学习day32

    生产与消费者问题:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者从仓库中取走产品:如果仓库中没有产品,生产者就将产品放入仓库,否则就停止生产等待:如果仓库中有产品,消费者就取走,否 ...

  5. node.js - http、模块化、npm

    今天是node学习的第二天,其实越往后面学越感觉有点熟悉的味道了,光针对于node来说哈,为什么呢,因为我之前学过一点云计算的东西,当时感觉没什么用搞了下服务器客户端这些,没想到这里还能用一用,至少看 ...

  6. 群晖下虚拟机编译部署WOW服务端TrinityCore

    前言 前几天突然想玩WOW了,但是我是一个特别轻度的玩家,以前点卡的时候,我就是上去一个人做做任务,跑跑地图,不怎么玩副本和PVP,现在让我花钱充月卡,不太现实,没那个时间玩,所以,就考虑玩个私服,但 ...

  7. python学习-Day5

    目录 今日学习内容详解 流程控制理论 程序执行流程分类: 重点小知识* 分支结构(if 语法) 单 if 分支 if 与 else 分支 if 与 elif 与 else 分支 if嵌套 练习 循环结 ...

  8. XCTF练习题---CRYPTO---Broadcast

    XCTF练习题---CRYPTO---Broadcast flag:flag{fa0f8335-ae80-448e-a329-6fb69048aae4} 解题步骤: 1.观察题目,下载附件 2.下载完 ...

  9. CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF

    CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF https://devblogs.microsoft.com/dotnet/corewcf-v1-relea ...

  10. VSCODE调试时在cygwin.S中发生段错误

    起因: C++实现矩阵类和向量类 当看了我实现的矩阵类后,一个同学问我: 然后我就试了试1000维,结果运行时在cygwin.S里引发了奇奇怪怪的Segmentation fault,而且这个文件还是 ...