Skip to content

Latest commit

 

History

History
201 lines (133 loc) · 5.24 KB

372-539616-[专业选修]精确十进制数_Decimal.sy.md

File metadata and controls

201 lines (133 loc) · 5.24 KB
show version enable_checker
step
1.0
true

精确十进制(Decimal)

回忆

  • 上次了解Fraction(分数)类型变量
  • Fraction(分数)类型有三种初始化方法
    • 用小数当参数
    • 用整数当分子和分母
    • 用字符串
  • 关于精度
    • 由于二进制无法精确对应十进制小数
    • 所以用分数
  • 遇到了一个decimal.Decimal("1.47")

什么是decimal

  • decimal是一个模块(module)

图片描述

  • 源代码位置在
    • /usr/lib/python3.8/decimal.py

图片描述

  • decimal里面有什么

decimal

图片描述

  • 这是一个十进制的
    • 可进行数学运算的模块

Decimal

图片描述

  • 看起来可以试试

图片描述

  • 好像并不精准
  • 这可不行啊?!🤔
  • 说好的精确十进制呢?

继续查询

  • decimal 模块中主要用的是 Decimal 类

图片描述

  • 应该可以用字符串来初始化Decimal的对象
  • 有双引号的字符串参数才构成精确的0.1
  • decimal.Decimal("0.1")是精确0.1
  • decimal.Decimal(0.1)是ieee-754中的双精度数值
    • 近似0.1
    • 但不精确

图片描述

  • 确实可以精准地进行运算
  • 不怕算账了
  • 可以转化为分数吗?

相互转化

图片描述

  • 精确十进制类型的变量可以转化为分数
  • 那反过来可以么?

图片描述

  • 分数看起来不能转化为精确十进制数
  • 看起来精确十进制数是更为基础的类型
  • 但是1/3这种无限不循环小数是如何表示呢?

精度

  • 除法可以做
  • 得到的还是一个精确十进制数类型的

图片描述

  • 但是精度有限
  • 毕竟不是无限小数
  • 可以控制精度么?

精度控制

图片描述

  • 去试试

图片描述

  • 好像到一定精度就不好使了
  • 边界在哪呢?

边界

图片描述

  • 一步步试

图片描述

  • 这个边界还能调么?

查询模块内容

  • 查询类的帮助

图片描述

  • 在查询模块的帮助

图片描述

  • 好像可以设置上下文
  • 上下文里面是否包括精度位数呢?

上下文

图片描述

  • 精度28位可以改到30位
  • 但因为原来的decimal.Decimal类的变量的精度就是28位
  • 所以精度可以达到但是数值还是原来的
  • 我就想计算出1/3,有效精度30位
  • 怎么办?

提高精度

  • 从28位修改为30位之后
  • 原来的数字会在末尾补0

图片描述

  • 31位的精度还是到不了
  • 但是30位的精度确实是可以的
  • Decimal还有什么好处呢?

人生苦短

图片描述

  • 毕竟Guido是从数学研究所出来的
  • 精确计算没有问题

图片描述

  • 根号2小数点后保留1000位
  • 非常快速
  • 不仅不用管算法细节
  • 而且计算速度还非常快!!!😄
  • 即使是默认28位的精度
  • 也远超目前的精度描述方式

目前精度

  • 目前精度系统yocto精确到小数点后24位
Value Symbol English standard 中文
10-1 d deci 分 fēn
10-2 c centi 厘 lí
10-3 m milli 毫 háo
10-6 µ micro 微 wēi
10-9 n nano 纳 nà
10-12 p pico 皮 pí
10-15 f femto 飞 fēi
10-18 a atto 阿 à
10-21 z zepto 仄 zè
10-24 y yocto 幺 yāo
  • Decimal精确到小数点后28位
  • 默认的就很厉害了
  • 先去总结Decimal吧

总结

  • Decimal是精确十进制类型的变量
    • 可以以字符串作为参数
    • 可以直接进行运算
    • 比Fraction更适合做基础
  • 如果精度不够
    • 可以把上下文中的 精度(prec)提高
    • 这样就可以体高精度了

图片描述

  • 例子里面有个1e-2 这是什么意思?🤪
  • 下次再说 👋