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

Posted yjzoier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浮点数相关(非初赛内容)相关的知识,希望对你有一定的参考价值。

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

以上是关于浮点数相关(非初赛内容)的主要内容,如果未能解决你的问题,请参考以下文章

内部格式为 GL_RGBA8 的纹理在片段着色器中显示为浮点数

将浮点数乘以 Python 中的函数并且无法将序列乘以“浮点”类型的非整数

MicroPython内核开发笔记书内软件用例 :浮点数相关实验

从非均匀范围转换浮点数

C 不能打印/表示非规范化浮点数吗?

JSON 转储非数字浮点数与 Python 的 ujson 模块