浮点数相关(非初赛内容)
Posted yjzoier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浮点数相关(非初赛内容)相关的知识,希望对你有一定的参考价值。
浮点数包括 float
double
和 long 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
}
这样比较是为了避免 浮点误差,浮点数的误差的产生一般由于两个原因
- 由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个无限位的小数。
例如 十进制的0.9虽然只有一位小数,转成2进制是无限循环小数0.1110011001100110011... - 计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,double 可以保留十进制15~16位(二进制52位)有效数字。那有效数字以后的就被忽略了。
例如上面的0.9的表示受精度所限,精度以后的就被忽略了,这样
float时,它是0.89999998
double时,它是0.90000000000000002
(该段摘自百度知道匿名网友的回答)
参考资料
以上是关于浮点数相关(非初赛内容)的主要内容,如果未能解决你的问题,请参考以下文章
内部格式为 GL_RGBA8 的纹理在片段着色器中显示为浮点数
将浮点数乘以 Python 中的函数并且无法将序列乘以“浮点”类型的非整数