浮点型变量和零的比较:因为浮点数在内存的存储方式使得,有些浮点数在内存中无法精确的存储,
这样就必然有精度的缺失,一旦丢失就可能计算不够准确。无法用==直接判断两个浮点数相等。
不能直接比较,需要设置一个0的精度范围
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define EXP 0.0000000001//设置0的精度
int main()
{
float a = 1.0;
if (a >= -EXP&&a <= EXP)//判断a是否在0的精度范围内
就意味着a是无限接近0的数字,就约等于0。
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}
计算一元二次方程组根
int main()
{
float a = 0.0;
float b = 0.0;
float c = 0.0;
printf("请输入a b c 的值:\n");
scanf("%f%f%f", &a, &b, &c);
if (a >= -EXP&&a <= EXP)
printf("不是一元二次方程!\n");
else
{
float d = 0.0;
d = b*b - 4 * a*c;
if (d >= -EXP&&d <= EXP)
{
printf("方程有一个根:%f\n",(-b)/2*a);
}
else
{
printf("方程有两个实根:%f %f\n", ((-b) +sqrt( d)) / (2 * a), ((-b) - sqrt(d)) / (2 * a));
}
}
system("pause");
return 0;
}
判断一个浮点数是否等于20
int main()
{
float f = 0.0;
scanf("%f", &f);
if ((f - 20.0) >= -EXP && (f - 20.0) <= EXP)
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}
这样就必然有精度的缺失,一旦丢失就可能计算不够准确。无法用==直接判断两个浮点数相等。
不能直接比较,需要设置一个0的精度范围
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define EXP 0.0000000001//设置0的精度
int main()
{
float a = 1.0;
if (a >= -EXP&&a <= EXP)//判断a是否在0的精度范围内
就意味着a是无限接近0的数字,就约等于0。
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}
计算一元二次方程组根
int main()
{
float a = 0.0;
float b = 0.0;
float c = 0.0;
printf("请输入a b c 的值:\n");
scanf("%f%f%f", &a, &b, &c);
if (a >= -EXP&&a <= EXP)
printf("不是一元二次方程!\n");
else
{
float d = 0.0;
d = b*b - 4 * a*c;
if (d >= -EXP&&d <= EXP)
{
printf("方程有一个根:%f\n",(-b)/2*a);
}
else
{
printf("方程有两个实根:%f %f\n", ((-b) +sqrt( d)) / (2 * a), ((-b) - sqrt(d)) / (2 * a));
}
}
system("pause");
return 0;
}
判断一个浮点数是否等于20
int main()
{
float f = 0.0;
scanf("%f", &f);
if ((f - 20.0) >= -EXP && (f - 20.0) <= EXP)
printf("yes\n");
else
printf("no\n");
system("pause");
return 0;
}