Skip to content

Latest commit

 

History

History
63 lines (40 loc) · 1.64 KB

README.md

File metadata and controls

63 lines (40 loc) · 1.64 KB

求解平方根

plan

任务目标

  1. 不用数学库,求解sqrt(2)
  2. 精度到小数点后10位

任务分析

平方根求解有两种常用方法:二分发和牛顿法, 考虑到出题者的意图,本题应该是要查看二分法的处理

二分法的退出条件和精度要去有关,当两次计算的结果在精度范围内是一致的,就退出。

课题

二分法求解平方根

课题的解决方案

  • 二分法实现开平方根,并和标准库一起做基准测试
  • 使用go和tdd来实现

Do

确定行动措施

  1. 以tdd的方式完成二分法求平方根
  2. 完善基准测试
  3. 用性能分析工具分析改进点
# 用下面命令来生成性能分析文件
go test -bench="." -benchmem -cpuprofile profile.out

# 用下面的命令来在web生成可视化图
go tool pprof -http=172.17.0.2:8000 profile.out

Check

  • 求绝对值也是影响性能的点
  • 带入精度考虑问题,会导致指数浮点转浮点会消耗大量性能
  • 不考虑精度的情况下,标准库的方式性能会高两个数量级
  • 所以还是可以从绝对值/浮点比较等地方进行优化

Adjust

  • 利用基本的数据结构知识灵活解决问题
  • 本例中就是利用二分法来解决问题,只需要注意退出条件
  • 性能分析工具用的不熟,还需要花事件深入分析

总结

2019.10.18

在能使用math库的地方尽量使用math,毕竟math库做了大量优化, 后期是可以分析一下源码来提升技能的

除了二分法来解,还有牛顿法,后者需要一定的数学基础, 后期如果了解了,也可以添加进来