浮点数知识储备

********浮点数*********

1、浮点数也称小数或实数。
2、C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。
在任何区间内(如1.0 到 2.0 之间)都存在无穷多个实数,计算机的浮点数不能表示区间内所有的值。
3、占用内存的情况:

#include <stdio.h>
 
int main()
{
  printf("sizeof float is %d\n",sizeof(float));//sizeof float is 4
  printf("sizeof double is %d\n",sizeof(double));//sizeof float is 8
  printf("sizeof long double is %d\n",sizeof(long double));//sizeof float is 16
}

4、float只能表达6-7位的有效数字,不能用“==”判断两个数字是否相等。
double能表达15-16位有效的数字,可以用“==”判断两个数字是否相等。
long double占用的内存是double的两倍,但表达数据的精度和double相同。
在实际开发中,建议弃用float,只采用double就可以,long double暂时没有必要,但不知道以后的操作系统和编译器对long double是否有改进。


二、浮点数的输出


float采用%f占位符。
double采用%lf占位符。测试结果证明,double不可以用%f输入,但可以用%f输出,但是不建议采用%f,因为不同的编译器可能会有差别。
long double采用%Lf占位符,注意,L是大写。
浮点数输出缺省显示小数点后六位。
浮点数采用%lf输出,完整的输出格式是%m.nlf,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。
 

#include<bits/stdc++.h>
using namespace std;
int main()
{
   double ff=70001.538;
   printf("ff=%lf=\n",ff);       // 输出结果是ff=70001.538000=
   printf("ff=%.4lf=\n",ff);     // 输出结果是ff=70001.5380=
   printf("ff=%11.4lf=\n",ff);   // 输出结果是ff= 70001.5380=
   printf("ff=%8.4lf=\n",ff);    // 输出结果是ff=70001.5380=
}

三、常用的库函数
 

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

四、整数与浮点数的转换

#include <stdio.h>
 
int main()
{
  int ii=3;
  int jj=4;
  double dd;
 
  dd=ii;        // 可以
  printf("dd is %.2lf\n",dd); //dd is 3.00
 
  dd=ii/jj;     // 不行
  printf("dd is %.2lf\n",dd); //dd is 0.00
 
  dd=(double)ii/jj;  // 可以
  printf("dd is %.2lf\n",dd); //dd is 0.75
}
  • 在浮点数的取值范围内,整数转换为浮点数不会有精度的损失,浮点数转换为整数后,会丢弃小数位。
  • 五、科学计数法

  • 用科学记数法表示数时,不改变数的符号,只是改变数的书写形式而已,可以方便的表示日常生活中遇到的一些极大或极小的数 。如:光的速度大约是300,000,000米/秒;全世界人口数大约是:6,100,000,000,这样的数书写和显示都很不方便,为了免去写这么多重复的0,将其表现为这样的形式:6,100,000,000=6.1×109,即6.1E9或6.1e9。
    0.00001=1×10-5,即绝对值小于1的数也可以用科学记数法表示为a乘10-n的形式。即1E-5或1e-5。
    科学计数法采用%e或%E输出,完整的输出格式是%m.ne或%m.nE,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。

    #include <stdio.h>
     
    int main()
    {
      double dd;
     
      dd=123000000;
      printf("dd is  %.2e\n",dd);
     
      dd=-123000000;
      printf("dd is %.2e\n",dd);
     
      dd=0.0000000123;
      printf("dd is  %.2e\n",dd);
     
      dd=-0.0000000123;
      printf("dd is %.2e\n",dd);
    }
    




     

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值