首页 > 其他 > 详细

浮点数相关(非初赛内容)

时间:2018-10-15 15:39:09      阅读:167      评论:0      收藏:0      [点我收藏+]

浮点数包括 float doublelong double
下面介绍一些关于浮点数杂七杂八的知识。

读入 & 输出

void example(){
    float a;
    double b;
    long double c;
    scanf("%f%lf%Lf", &a, &b, &c);
    printf("a=%f,b=%lf,c=%Lf\n", a, b, c);
}

比较

浮点数的比较比较特殊。两个浮点数比较时,大于/小于可以直接用 a>b a<b,但是等于需要特别注意;一般而言,我们用下面的方法比较两个浮点数是否相等:

const double eps = 1e-6; //控制精度误差
double a, b;
if (fabs(a-b) < eps){
    //a = b
}else{
    //a != b
}

这样比较是为了避免 浮点误差,浮点数的误差的产生一般由于两个原因

  1. 由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个无限位的小数。
    例如 十进制的0.9虽然只有一位小数,转成2进制是无限循环小数0.1110011001100110011...
  2. 计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,double 可以保留十进制15~16位(二进制52位)有效数字。那有效数字以后的就被忽略了。
    例如上面的0.9的表示受精度所限,精度以后的就被忽略了,这样
    float时,它是0.89999998
    double时,它是0.90000000000000002
    (该段摘自百度知道匿名网友的回答)

参考资料

  1. 浮点数比较大小 - CSDN -
    莓Akiko
  2. 浮点数的误差是怎么形成的 - 百度知道 - 匿名网友

浮点数相关(非初赛内容)

原文:https://www.cnblogs.com/YJZoier/p/9791157.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!