码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-15 16:24:21      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:误差   包括   产生   htm   question   保留   float   ida   计算机   

浮点数包括 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. 浮点数的误差是怎么形成的 - 百度知道 - 匿名网友

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

标签:误差   包括   产生   htm   question   保留   float   ida   计算机   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!