文章目录

  • 浮点数
  • C语言规定:
  • 总结:
  • 浮点数的输出
  • 常用的库函数
  • 应用技巧
  • 科学记数法


浮点数

浮点数也称小数或实数, C语言中采用float 和double关键字来定义小数, float 称为单精度浮点型, double称为双精度浮点型,long double更长的双精度浮点型.浮点数通常只是实际值的近似值, 比如7.0可能被存储为6.999999

C语言规定:

  • float 类型必须有至少6位有效数字, 且取值范围至少是10-37-1037
  • double与float的最小取值范围相同, 但至少必须有表示10位的有效数字.
  • long double 满足比double类型更高的精度要求.不过,C只保证long double类型至少与double类型的精度相同.
  • float 数的两个特征:
  1. float数据类型表达的是一个近似的数, 不是准确的, 小数点后的N位有误差, 浮点数的位数越大, 误差越大, 到8位的时候误差了1, 基本上不能用了.
  2. 用"=="可以用来比较两个整型或字符是否相等, 但看起来相等的两个浮点数就是不会相等.

总结:

  1. float 只能表达6-7位的有效数字, 不能用==来判断两个数字是否相等.
  2. double 能表达15-16位有效的数字, 可以使用==来判断两个数字是否相等.
  3. long double 与 double的特征相同.
  4. ==在实际开发中,建议弃用float, 只采用double就可以了, long double 暂时没必要, 但以后的操作系统和编译器对long double 是 否有改进, 暂时不得知. ==

浮点数的输出

  • float 采用 %f输出,
  • double 采用 %lf输出,测试结果显示, 也可以使用%f输出, %lf缺省显示小数点后六位.如果要显示小数点后n位, 用%.nlf 这个python中的保留多少位小数位一样的, 比如保留2位, 就是%.2f,
  • %lf完整的输出格式是%m.nlf, 指定输出数据整数部分和小数部分共占m位, 其中有n位是小数位, 若实际数值长度小于m, 则左侧补空格, 若实际数值长度大于m, 则按实际输出.
  • long double 采用%Lf输出, 注意L是大写的

常用的库函数

  • double atof(const char *nptr); // 把字符串nptr转换为double.
  • double fabs(double x ); // 求双精度实数x的绝对值.
  • double pow(double x, double y); // 求x的y次幂(次方)
  • double atof(const char *nptr); // 把字符串nptr转换为double.
  • double round(double x); // double 四舍五入
  • double ceil(double x); // double 向上取整
  • double floor(double x); // double 向下取整
  • double fmod(double x, double y); // 求x/y 整除后的双精度余数
  • double modf(double val, double *ip); // 把双精度val分解成整数部分和小数部分, 整数部分存放在ip所指的变量中, 返回小数部分.

应用技巧

  • 在实际开发中, 我们经常用整数代替浮点数, 因为整数是精确的, 效率也更高.
  • 如:人的身高一米七五, 使用米来表示,就是1.75m, 是浮点数, 使用厘米表示就是175cm, 是整数,

科学记数法

在实际开发中, 很少使用科学记数法, 浮点数经常出现在计算机系统中, 在内存中的存放方式就是科学计数法, 科学记数法是一种记数的方法, 把一个数表示成a与10的n次幂相乘的形式,(1<=|a|<10, n为整数)

  • 如: 678000000000也可以记为6.78X1011计算器与电脑表达10的幂一般是用E或e, 也就是说678000000000=6.78E11或6.78e11
  • 输出采用: %E%e, 完整的输出方式是:%m.nE%m.ne 指定输出数据整数部分和小数部分共占m位, 其中有n位是小数位, 若实际数值长度小于m, 则左侧补空格, 若实际数值长度大于m, 则按实际输出