手工计算对数的方法和对应的C代码
如何手算对数?为简单起见,以222为底数演示。
问题:求log2a\log_2alog2a的值,其中aaa为已知实数。
由于人们的思维逻辑普遍是线性的,而对数是非线性的,对数需要规模化思维才更好理解,因此将问题转化成求指数会更直观一些:
2x=a2^x=a2x=a,问aaa可以拆成多少222的次幂相乘,将幂加起来即可。
下面是过程:
将aaa不断除以2,一直到除不尽余bbb:
2x=a=21212121b2^x=a=2^12^12^12^1b2x=a=21212121b
bbb比222小,它如何写成222的次幂呢?
由于指数函数f(x)=2xf(x)=2^xf(x)=2x递增步长是222的次幂,bbb是222的α\alphaα次幂,等价于b2b^2b2是222的α2\dfrac{\alpha}{2}2α次幂,这样如果b2b^2b2大于222,就可以递归了。
显然b=(b2)12b=(b^2)^{\frac{1}{2}}b=(b2)21,设b2=cb^2=cb2=c,则类似aaa拆分ccc:
c=2121dc=2^12^1dc=2121d
显然d=(d2)12d=(d^2)^{\frac{1}{2}}d=(d2)21,设d2=ed^2=ed2=e,则类似aaa拆分eee:
…
这是一个递归的手算对数的最简单方法,不用查表,不需要任何高数知识。
若底数不是222,假设是AAA,则:
Ax=A1A1..bA^x=A^1A^1..bAx=A1A1..b
b=(bA)1Ab=(b^A)^{\frac{1}{A}}b=(bA)A1
接着递归处理bAb^AbA即可。
下面是一个按照上述的手算步骤写的C代码,可求任意底数的对数:
#include <stdio.h>
#include <stdlib.h>double logarithm(int i, double temp, double base, double num, int acc)
{if (acc == 1)return 0;if (num >= base) {return 1 + logarithm(0, 1, base, num/base, acc-1);} else {while (i++ < base) {temp *= num;}return (1/base)*logarithm(0, 1, base, temp, acc-1);}
}int main(int argc, char **argv)
{double base, num, ret;int acc = (int)atoi(argv[1]); // 递归层数,表示精度,一般设置100base = (double)atoi(argv[2]); // 底数num = (double)atoi(argv[3]); // 待求数ret = logarithm(0, 1, base, num, acc);printf("%.18lf\n", ret);}
这篇文章源自于一个朋友在知乎上的问题:
怎么推导或证明 e^x 的导数是自身? - 知乎
我以为:
“y=exy=e^xy=ex表示在以xxx为增长率的增长极限(比如以xxx为利率的复利极限),那么在xxx为增长率的时候,yyy的增长最大就是exe^xex,这就是yyy的导数(毕竟导数就是增长率的极限)了,就是它自身了。
eee是通过(1+1n)n(1+\dfrac{1}{n})^n(1+n1)n的极限定义出来的,所以直接从那个定义的形式入手去理解即可。”
说实话,将eee的定义用二项式展开,然后求极限后求导会更像个正经答案,但那只是数学把式,我承认摆置数学把式是笛卡尔方法论的核心用例(在笛卡尔之前,数学无法工程化),这也是我一再强调和推崇的,但同时我需要有一个直观的解释,而不是单纯比划公式。读历史会发现,任何伟大的公式背后,在一开始都源自于一种直观的直觉,然后在寻求表达时才有了公式,比如伟大的平方反比律。
一直以来,我希望自己的孩子关注两个基本点:
1.培养一种思维习惯,用历史的,跨界的眼光思考问题,关注发展和变化。
2.掌握笛卡尔方法论,将从线索到结论的过程通过一种工程框架串联起来。
这也是我自己一直以来关注的。
当看到一些我平时发布的博客,朋友圈之后,很多人不能理解我为什么能为这么显而易见的简单东西兴奋这么久,我无法反驳,因为这些东西确实简单,但我又可以反驳,因为它们并不是很显而易见,若非老师或者书本告诉你,你自己以为的那部分在哪里?简单的,有多少人可以不用任何四则混合运算知识,将绳子分成5等份?复杂的,如果所有的书籍和记忆消失了,人类有多大的几率比5万年前的原始智人更强?
传统教育让我们注重客观,少说“我以为”,但我以为这是不正确的,智人之跃入文明,全在形而上。
浙江温州皮鞋湿,下雨进水不会胖。
手工计算对数的方法和对应的C代码相关推荐
- ios计算个税方法以及ui界面设计代码详解
// // ZYAppDelegate.m // UITest1 // // Created by cacahaha on 15/4/8. // Copyright (c) 2015年 ZhiYou. ...
- boost::gil模块沿 x 轴计算梯度的方法的示例
boost::gil模块沿 x 轴计算梯度的方法的示例 实现功能 C++实现代码 实现功能 boost::gil模块沿 x 轴计算梯度的方法的示例 C++实现代码 #include <boost ...
- yolov5-计算fps(新加入:4. 记录运行B导yolov7-tiny后计算fps的方法)
目录 0. FPS记录的原理 1. 自己的 2. 其实yolov5有自带的打印这些参数 3. 清风大佬分享的 3.1 单个的计算fps函数 3.2 整体的完整代码 4. 记录运行B导yolov7-ti ...
- 用正割对数计算积分的方法
用正割对数计算积分的方法 下面介绍一种利用正割对数,计算积分的方法. 相关资料下载网址: 链接:https://pan.baidu.com/s/1z3R9b-UmV3AcJKLPFNNT3A?pwd= ...
- Python中用于计算对数的log()方法
本文转载至:http://www.jb51.net/article/66130.htm 这篇文章主要介绍了Python中用于计算对数的log()方法,是Python入门基础中的必会的方法,需要的朋友可 ...
- 利用计算机辅助设计,一种利用计算机辅助设计和制作手工栽绒毯的方法
一种利用计算机辅助设计和制作手工栽绒毯的方法 [技术领域] [0001]本发明属于手工栽绒毯的设计制作领域,特别涉及一种利用计算机辅助设计和制作手工栽绒毯的方法. [背景技术] [0002]手工栽绒毯 ...
- Python 手工计算x的算术平方根,一个中国古代的数学成就
目录 原理 代码 测试 sqrt(n)与n**0.5 科学计算法测试 精度测试 1000位到1万位的耗时测试 其他方法 牛顿迭代法 二分法 原理 据说这个平方根计算法出自<九章算术>,成书 ...
- 2020-08-24绘制ROC PR曲线 核心方法总结 ,计算AUC核心方法
#1 绘制ROC AUC PR曲线 #核心方法 roc_curve(y_test, preds) # preds为概率形式 #source code import matplotlib.p ...
- 关于字符串计算size的方法比较
往往字符串需要计算size来满足UI排版的自适应的需要,而一般字符串也是放在UILabel里的. 而在计算size的方法里,一般有两种方式(deprecated的就不说了). NSString的方法 ...
最新文章
- 暂存单点传播帧,以及使用 TIM 来传递
- ACL 2020 | 基于多级排序学习的层次化实体标注
- 2018信息安全铁人三项第三赛区数据赛题解
- webservice的css哪里添加,jQuery_XML+XSLT+CSS+JQuery+WebService组建Asp.Net网(2), 3. 更 - phpStudy...
- PyTorch深度学习实践03
- git工作区和缓存区概念理解
- [NewLife.XCode]实体类详解
- python class tynu()_Visual Studio Express | Teraz Visual Studio Community
- 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(二)
- 【视频】利用IDEA 创建 spring mvc项目
- Aspose.Pdf for .NET控件PDF文档到Excel、EPS、SVG等的转换
- 学校年检计算机台账,学校年检整改报告.docx
- java逻辑运算符的使用
- Network Delay Time
- hive sql脚本学习
- 行政人员为什么需要一套固定资产管理系统?
- We never been grown up
- 大乐斗2服务器维护,《QQ宠物》和《乐斗II》停止运营
- 高校青年教师应该怎么提高收入
- 软件测试工程师是这么写年终报告的
热门文章
- otf和ctf的意义_北京邮电大学出版社
- Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战
- libnids分析(9)---nids.h注释
- 嵌入式 printf(\033[1;33m Hello World. \033[0m \n);有趣的串口之超级终端的玩法
- 社区儿童计算机活动总结,幼儿园小班的社区活动总结
- 实战:k8s中网络策略实验(成功测试-博客输出)-20211005
- MyEclipse 10 注册码 破解 到期限制
- linux 日历服务器,使用linux的cal命令显示日历
- Python Web异常处理
- 子类不能抛出新的异常