用 Basic Mode 的计算器算对数

像这种常见的「普通」计算器,其实啥都能算(有了极限,啥玩意都能变成加减乘除)。其中,自然对数尤其好算,本文将提供一种方法,主要利用的是计算器的开平方功能。



众所周知,自然对数有如下展开式:

\( ln{x} = x-\frac{x^{2}}{2}+\frac{x^{3}}{3}-\frac{x^{4}}{4}+\cdots \)

但这玩意对于这种「普通」计算器来说太难算了。所以,条条大路通罗马,在这里我们换一种思路。

回想一下函数 \( y = a^x (a> 0, a \neq 1) \) 的导数是怎么推出来的:

\( \frac{\mathrm{d}}{\mathrm{d}x}a^x \)

\( =\lim_{\Delta x\rightarrow 0}\frac{a^{x+ \Delta x} - a^x}{\Delta x} \)

\( =\lim_{\Delta x\rightarrow 0}a^x\frac{a^{\Delta x} - 1}{\Delta x} \)

\( =a^x\lim_{\Delta x\rightarrow 0}\frac{a^{\Delta x} - 1}{\Delta x} \) (1)

可以看出,后面那一坨极限已经跟 \(x\) 没关系了,应该等于一个跟 \(a\) 有关的常数。那么这个常数到底是多少呢?容易发现,令 \( x=0 \) 可得

\( \frac{\mathrm{d}}{\mathrm{d}x}a^x \Big|_{x=0} =\lim_{\Delta x\rightarrow 0}\frac{a^{\Delta x} - 1}{\Delta x} \)

也就是说,这个极限就等于函数在 \(x=0\) 处的导数值。根据指数函数的图像,我们「猜测」(这里就不是很严谨了,不过这不是本文的重点)当 \(a\) 取到某个值时,这个极限等于 \(1\), 此时函数的导函数恒等于函数本身。设这个值为 \(e\)(可以算出 \(e = 2.71828\cdots\), 用 \(ln{x}\) 表示以 \(e\) 为底 \(x\) 的对数),可得

\( \frac{\mathrm{d} }{\mathrm{d} x} e^x = e^x \)

所以

\( \frac{\mathrm{d} }{\mathrm{d} x} a^x \)

\(= \frac{\mathrm{d} }{\mathrm{d} x} (e^{ln{a}})^x\) (代入对数恒等式可得)

\(= \frac{\mathrm{d} }{\mathrm{d} x} e^{xln{a}} \)

\( = \frac{\mathrm{d} }{\mathrm{d} (xln{a})} e^{xln{a}} \frac{\mathrm{d} }{\mathrm{d} x}(xln{a}) \) (链式法则)

\( = e^{xln{a}}\cdot ln{a} \)

\( = {(e^{ln{a}})}^x\cdot ln{a} \)

\( = a^x\cdot ln{a} \)

跟 (1) 式比较一下,即得

\( ln{a} = \lim_{\Delta x\rightarrow 0}\frac{a^{\Delta x} - 1}{\Delta x} \)

左边是对数,右边是指数,离目标近了一步,不过还是不好算。来点黑科技,把指数式变成根式:

\( ln{a} = \lim_{x\rightarrow 0}\frac{a^{x} - 1}{x} \)

\( = \lim_{k\rightarrow +\infty }\frac{a^{(2^{-k})} - 1}{(2^{-k})} \)

\( = \lim_{k\rightarrow +\infty }(a^{\frac{1}{2^{k}} } - 1)\cdot 2^{k} \)

\( = \lim_{k\rightarrow +\infty }(\sqrt[2^k]{a} - 1)\cdot 2^{k} \)

\( = \lim_{k\rightarrow +\infty }(\underbrace{\sqrt{\cdots\sqrt{\sqrt{a}}}}_{k\times } - 1)\cdot 2^{k} \) \( (k\in \mathbb{N}) \)

这个式子的值就很好算了,只要不断开平方就行了。试着令 \(k=8\), 算一下 \( ln{2} \):

算出的值是 \( 0.694086413 \), 事实上 \( ln{2} \approx 0.693147 \), 误差 \( 0.000939413 \), 怎么样,够精确吧?再算算 \( ln{3} \):

算出的值是 \( 1.100972987 \), 事实上 \( ln{3} \approx 1.09861 \), 误差 \( 0.00236299 \), 比刚才略大。可以证明,\( x \) 越接近 \( 1 \), 用这种方法算出的 \( ln{x} \) 的近似值跟实际值误差越小。下面是函数 \( y=ln{x} \) 和 \( y=(\sqrt[256]{x}-1)\cdot 256 \) 在同一坐标系内的部分图像。可以看出,拟合得非常好:

这还只是 \( k=8 \) 时的情形, \(k\) 更大就更精确了。怎么样,这个方法不错吧?

时间: 2024-08-03 22:21:16

用 Basic Mode 的计算器算对数的相关文章

Basic Calculator 基本计算器-Leetcode

1.题目: Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces . You may assume that the given expressi

Basic Calculator 基本计算器

2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈操作,这个时候需要结合符号进行相应的运算. public int calculate(String s) { if (s == null || s.length() == 0) return 0; int res = 0; Stack<Integer> stack = new Stack<&

selenium验证车贷计算器算法

1.验证页面上的车贷计算器算的结果是否与需求中给的公式结果一致. 页面图片: 代码如下(简单实现,需要优化): package com.test; import java.math.BigDecimal; import org.junit.Assert; import org.openqa.selenium.By; import org.testng.Reporter; import org.testng.annotations.AfterClass; import org.testng.ann

Qt--计算器的实现

一.计算机程序界面分析从效果图我们可以得知1.QLineEdit用于接受用户输入2.QLineEdit能够获取用户输入的字符串3.QLineEdit是功能性组件,需要父组件作为容器4.QLineEdit能够在父组件中进行定位该计算器的坐标及位置如图所示界面的代码实现 #include "Widget.h" #include <QApplication> #include <QPushButton> #include <QLineEdit> int m

【转载】分贝是个什么东西?

来源:未找到- 大家都是用计算机做音乐的高手了--呃,那位同学!别紧张嘛~看你激动的,高手其实也没什么了不起的--不信?那我问问你几个问题,你答得上来,算你了不起!我们用电脑做音乐的时候,经常会接触到各种各样的表,无论是测量什么的表,它们都离不开一个单位--分贝(dB),我的问题就和它有关,听好了: 1. 20dB和60dB究竟差多少?(不要回答我60-20=40(dB),我抽你呀!你告诉我40dB究竟是多响,难道用手指在峰值表上测量距离吗?) 2. 72dB和66dB的声音合在一起有多响?(停

音频电路设计中的基本知识(-)

模拟音频的起源在电话线路.至今很多标准里的一些数据,比如600欧姆阻抗等一些参数还是从电话线路设计中遗留下来的.趁着最近设计一个语音矩阵的项目,总结了下网上一些关于音频方面的知识. 首先明确几个DIY发烧友们老是提到的概念.之所以提这个,是因为项目里用到的音频是跟其他设备集成的.对于其他设备其电路特性无从可知,只能从指标入手.还有就是传统电话线路遗传下来的在音响领域DIY设备时通常提到的平衡与非平衡传输的问题.最后会从音频线路阻抗匹配的角度入手,介绍一些常见的Line In/Out;Mic in

BZOJ 1044 木棍分割 解题报告(二分+DP)

来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3162  Solved: 1182[Submit][Status][Discuss] Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个

MD5加密和sha加密

sha加密原理Algorithm)又叫安全哈希加密技术,是当今世界最先近的加密算法.主要用于文件身份识别.数字签名和口令加密等. 对于明文信息A,通过SHA1算法,生成一条160位长的识别码B.且明文信息A和识别码B之间同时满足以下条件: 1.对于任意两条不同的明文信息A1.A2,其识别码B1.B2都不相同. 2.无法通过逆向算法由识别码B倒推出明文信息A. MOONCRM的用户密码采用SHA1加密存储,即服务器上存储的只是 由用户密码生成的识别码,而用户密码本身并没有存储在服务器上.用户输入登

一个影响力大、实战、干货的SEO案例

事情的起因是这样的: 额,旧的案例写着没意思,正在操作的案例又无法透漏更多的信息,思前想后,也许只有这个最合适了(绝对不能告诉你,这是领导教的只有一个案例的含蓄说法). 一.项目背景 先来介绍下项目接手时的背景:一个工业品分销商,电商站. 你还在期待啥?对,背景就是这样,没了. 二.数据分析 嗯,要做SEO,首先你要掌握目标网站的数据,没有数据的SEO一切都是空谈.要啥数据,自己搞呗.一句老话说的对,生活就像XX,自己动手,丰衣足食. 1.基本数据 "火车头"开起来,5k+的产品品类,