计算机中的浮点数和误差
浮点数
1. float类型又被称为单精度类型,尾数精确到7位有效数组字;double表示这种类型的数值精度是float类型的两倍,又被称为双精度。默认是double,浮点数数值默认为double类型,要将其变为flaot类型,需要在后面增加F/f,如:3.14F
2.浮点数存在舍入误差,很多数字不能精确表示。
当浮点数做数学运算的时候,你经常会发现如下一些问题:
JavaScript 中:
python 中
C中
IEEE 754标准引入的浮点数算术标准简介
最高位是符号位,规定浮点数的正负;偏置指数,紧跟在符号位之后,有效数字[公式]在最后。
几乎所有的编程语言都采用了 IEEE-745 浮点数表示法,任何使用二进制浮点数的编程语言都会有这个问题,只不过在很多语言中已经封装好了方法来避免精度的问题。
以python为例:
decimal 模块为快速正确舍入的十进制浮点运算提供支持。
https://docs.python.org/zh-cn/3/library/decimal.html#module-decimal
在涉及浮点数的算法中,要注意不能直接用等号判断两个浮点数是否相等,
这里已python为例:
在Python的math中的isclose()方法用于确定两个浮点数的值是否接近, 如果值接近则返回True,否则返回False。要使用此功能,您必须导入数学模块math。
语法格式:
math.isclose(a,b,rel_tol,abs_tol)
参数 说明
a 必需的参数, 检查紧密度的第一个值
b 必需的参数, 检查紧密度的第二个值
rel_tol=value 可选的。 相对公差。 它是值a和b之间的最大允许差。 默认值为1e-09
abs_tol=value 可选的。最小绝对公差。它用于比较接近0的值。该值必须至少为0