首页 > 其他分享 >浮点类型(double与float及其它们的输入输出)

浮点类型(double与float及其它们的输入输出)

时间:2023-11-12 21:26:02浏览次数:28  
标签:%. double 浮点数 float 浮点 printf

<1>浮点类型

(1)两种类型

  1. double 字长64位(8个字节),有效数字15,范围大概为2.2* 10^-308 ~ 1.79*10^308,0,nan;
  2. float字长32位(4个字节),有效数字7,范围大概为1.2 * 10^-38 ~3.4*10^38,0,nan;
    ————注明-nan:不是一个有效数字

由两种浮点类型的范围建立数轴可知:在靠近0但不包括0的一小片区域我们无法表达(这片区域关于0左右对称)

(2)类型对应的输入输出

  • float 输入%f 输出%f,%e;
  • double 输入%lf 输出%lf,%e;
注:%e意为输出一个科学计数法

以一段代码为例:

#include<stdio.h>

int main(){
double ff=1234.56789;
printf("%e\n %f",ff,ff);
return 0;
}输出的结果为1.234568e+003
1234.567890

(3)引申:科学计数法

举例:-5.67E+16

  • 整体的第一个+-可选;
  • e/E都可以;
  • 不能出现空格;
  • 整体的第二个+-号可以省略;
  • 小数点可选;

(4)保留小数点后几位数时涉及四舍五入的问题

以一段代码举例:

#include<stdio.h>

int main(){
printf("%.3f\n",-0.0049);
printf("%.30f\n",-0.0049);
printf("%.3f\n",-0.00049);
return 0;
}得出的结果为:-0.005
-0.004899999999999999800000000000(接近原数,小于原数)
-0.000

<2>浮点数的范围与精度

(1)超过浮点数的范围

  • printf输出inf表示超过范围的浮点数;
  • printf输出nan表示不存在的浮点数;
一个数除以0得到的数为无穷大,以一段代码为例:
#include<stdio.h>

int main(){
printf("%f\n",12.0/0.0);
printf("%f\n",-12.0/0.0);
printf("%f\n",0.0/0.0);
return 0;
}得出的结果为:1.#INF00
-1.#INF00
-1.#IND00
同时我们还需要注意:整数不能除以0-例如12/0,编译就不会通过;

(2)浮点的精度

————浮点没有精度
1)我们可以通过一段代码来分析浮点数是否有精度

#include<stdio.h>

int main(){
float a,b,c;
a=1.345f;
b=1.123f;
c=a+b;
if(c==2.468)
printf("相等");
else
printf("不相等,c=%.10f或%f\n",c,c);
return 0;
}得出的结果为:不相等,c=2.4679999352或2.468000;

由此可见:浮点没有精度

注意:

仅带小数点的字面量是double而非float;
因此加后缀f/F来表明变量类型为float;

2)运算中应注意的问题

在比较两个浮点数大小的过程中,直接让f1==f2可能失败,所以我们使用fabs(f1-f2)<1e-12(相当于1*10^-12),其中fabs()意为求绝对值

<3>浮点数的内部表达

1.浮点数在计算时是由专用的硬件部件实现的;

2.计算double和float用的部件是一样的;

3.浮点数的内部表达不同于整数内部表达,整数内部是二进制,而浮点数内部是一种编码形式:1个bit用来表达正负,11个bit用来表达它的指数部分,还有52(不一定)个bit用来表达它的分数部分

<4>浮点类型选择

无特殊需要,只使用double.

标签:%.,double,浮点数,float,浮点,printf
From: https://www.cnblogs.com/QingYuY/p/17827705.html

相关文章

  • 2.3 CE修改器:浮点数扫描
    本关需要使用CheatEngine工具对浮点数进行扫描,完成修改任务。浮点数是一种带有小数点的数值,通过“浮点数”扫描方式进行修改。本关中,健康值为单精度浮点数,弹药值为双精度浮点数,需要将这两项数值都修改为5000或更高。提示建议禁用“快速扫描”功能,以获取更准确的扫描结果。这......
  • 2.3 CE修改器:浮点数扫描
    本关需要使用CheatEngine工具对浮点数进行扫描,完成修改任务。浮点数是一种带有小数点的数值,通过“浮点数”扫描方式进行修改。本关中,健康值为单精度浮点数,弹药值为双精度浮点数,需要将这两项数值都修改为5000或更高。提示建议禁用“快速扫描”功能,以获取更准确的扫描结果。这......
  • [V8] Double & Triple Equals
    doubleequalsis15timesslowerthantripleequals.Underhooddoubleequalsneedtocall valueOf()functiontoconvertthevalue.({valueOf:()=>3})==3//true({valueOf:()=>3})===3//false ......
  • double保留两位小数
    我们都知道double和float都是浮点型,在转型或者比较的时候可能出现问题,这里讲一下怎么针对double类型做精度处理返回类型为double(四舍五入)使用Math.round转成long再转回doubledoubledou=3.1487426;dou=(double)Math.round(dou*100)/100;System.out.println(dou);使......
  • 与其他 IEEE 754 表示浮点数的编程语言一样,JavaScript 的 number 存在精度问题,比如 0.
    与其他IEEE754表示浮点数的编程语言一样,JavaScript的number存在精度问题,比如0.2+0.4的结果是0.6000000000000001。以下选项中,能得到0.6的是?AparseFloat(0.2+0.4)BparseFloat((0.2+0.4).toFixed(1))CMath.round(0.2+0.4)DparseFloat((0.2+0.6).toPrec......
  • java的double、float类型的比较
    在java中,针对double、float类型的运算和比较都最好不要直接进行,可以依靠BigDecimal来进行一、比较大小转换成long再比较,(这是long是基本类型,而不是Long对象,对象比较不要用==)Double.doubleToLongBits(0.042421d)==Double.doubleToLongBits(0.2342401d)Double.doubleToL......
  • 11月10日浮动float以及清除浮动clear
    目录浮动浮动的需要的属性float当float的值为left时当float值为right时当float属性值为none时float属性值为inherit时浮动的特殊情况1.多个浮动在浮动的时候如果包含框太窄,无法容纳对应的浮动元素就会两种情况一种就是其中一个框下降,第二种情况就是其中一个框被卡住了下降的代码cl......
  • Java float保留两位小数或多位小数
     Javafloat保留两位小数或多位小数方法1:用Math.round计算,这里返回的数字格式的.   floatprice=89.89;intitemNum=3;floattotalPrice=price*itemNum;floatnum=(float)(Math.round(totalPrice*100)/100);  //如果要求精确4位就*10000然后/10000方法2(OK):用DecimalFo......
  • 金额存储不能用float
    一、简介    金额存储不能使用float类型。    publicclassFloatTest{publicstaticvoidmain(String[]args){floatf1=6.6f;floatf2=1.3f;System.out.println(f1+f2);}}   以上结果为:7.8999996,直接......
  • x86平台SIMD编程入门(3):浮点指令
    1、算术指令算术类型函数示例备注加_mm_add_sd、_mm256_add_ps减_mm_sub_sd、_mm256_sub_ps乘_mm_mul_sd、_mm256_mul_ps除_mm_div_sd、_mm256_div_ps平方根_mm_sqrt_sd、_mm256_sqrt_ps倒数_mm_rcp_ss、_mm_rcp_ps、_mm256_rcp_ps快速计算......