0.9*10^3是不是科学计数法

3科学计数法. 长度.面积.体积单位及换算

课型:新授主备:刘雅琴审核:郭孝忠班级姓名

学习目标:1.学会科学中常用的科学记数法。

2.巩固长度单位及其换算;常用的面积单位及其换算;常用的体积单位及其换算。

学习重点:科学记数法;长度、面积、体积换算。

学习难点:科学记数法;长度、面积、体积换算。

(6)一张普通白纸的厚度是0.000068米,地球到太阳的距离是千米,将纸的厚度和太阳与地球间的距离用科学记数法表示.。

1、在Java中不属于整型变量的是()

2、以下变量声明正确的是()

3、在某个类中存在一个方法:void get S ort(int x),以下哪个是方法重载的声明()

4、下列方法定义中,正确的是()

5、下面哪一个是int型变量的取值范围()

6、下面的代码的执行结果是()

7、下面代码中的?处可以为()

对于以上代码描述正确的是()

9、以下由do-while语句构成的循环执行的次数是()

D、有语法错,不能执行

10、下列语句序列执行后,k 的值是()

int和float都是4字节32位表示形式。为何float的范围大于int?算法

这些问题,都是浮点数的存储方式形成的。  spa

  1. 指数位(Exponent):用于存储科学计数法中的指数数据,而且采用移位存储内存

其中float的存储方式以下图所示:it

而双精度的存储方式为:

 将一个float型转化为内存存储格式的步骤为:

     (2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。 
     (6)若是n是左移获得的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。若是n是右移获得的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。

R32.24和R64.53的存储方式都是用科学计数法来存储数据的,好比8.25用十进制的科学计数法表示就为:8.25*,而120.5能够表示为:1.205*,计算机根本不认识十进制的数据,他只认识0,1,因此在计算机存储中,首先要将上面的数更改成二进制的科学计数法表示,8.25用二进制表示可表示为.5用二进制表示为:用二进制的科学计数法表示1000.01能够表示为1.0001*,能够表示为1.1101101*,

任何一个数都的科学计数法表示都为1.xxx*,尾数部分就能够表示为xxxx,第一位都是1嘛,干吗还要表示呀?能够将小数点前面的1省略,因此23bit的尾数部分,能够表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,咱们知道9的二进制表示为1001,因此4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,由于指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,因此指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中的存储方式。

------------------------------------------------

首先看下8.25,用二进制的科学计数法表示为:1.0001*


而单精度浮点数120.5的存储方式以下图所示:

将一个内存存储的float二进制格式转化为十进制的步骤: 
     (1)将第22位到第0位的二进制数写出来,在最左边补一位“1”,获得二十四位有效数字。将小数点点在最左边那个“1”的右边。 
     (3)将小数点左移n位(当30位是“0”时)或右移n位(当30位是“1”时),获得一个二进制表示的实数。 
     (4)将这个二进制实数化为十进制,并根据第31位是“0”仍是“1”加上正号或负号便可。

那么若是给出内存中一段数据,而且告诉你是单精度存储的话,你如何知道该数据的十进制数值呢?其实就是对上面的反推过程,好比给出以下内存数据:0000,首先咱们现将该数据分段,0 110 00 ,在内存中的存储就为下图所示:

根据咱们的计算方式,能够计算出,这样一组数据表示为:1.0.5

而双精度浮点数的存储和单精度的存储大同小异,不一样的是指数部分和尾数部分的位数。因此这里再也不详细的介绍双精度的存储方式了,只将120.5的最后存储方式图给出,你们能够仔细想一想为什么是这样子的

下面我就这个基础知识点来解决一个咱们的一个疑惑,请看下面一段程序,注意观察输出结果

-------------------------------------------

可能输出的结果让你们迷惑不解,单精度的2.2转换为双精度后,精确到小数点后13位后变为了2.7,而单精度的2.25转换为双精度后,变为了2.0,为什么2.2在转换后的数值更改了而2.25却没有更改呢?很奇怪吧?

0000,这样2.25在进行强制转换的时候,数值是不会变的,而咱们再看看2.2呢,2.2用科学计数法表示应该为:将十进制的小数转换为二进制的小数的方法为将小数*2,取整数部分,因此0.282=0.4,因此二进制小数第一位为0.4的整数部分0,0.4×2=0.8,第二位为0,0.8*2=1.6,第三位为1,0.6×2 = 1.2,第四位为1,0.2*2=0.4,第五位为0,这样永远也不可能乘到=1.0,获得的二进制是一个无限循环的排列 ... ,对于单精度数据来讲,尾数只能表示24bit的精度,因此2.2的float存储为:

可是这样存储方式,换算成十进制的值,却不会是2.2的,应为十进制在转换为二进制的时候可能会不许确,如2.2,而double类型的数据也存在一样的问题,因此在浮点数表示中会产生些许的偏差,在单精度转换为双精度的时候,也会存在偏差的问题,对于可以用二进制表示的十进制数据,如2.25,这个偏差就会不存在,因此会出现上面比较奇怪的输出结果。

这里提一点:只要遇到除之后的结果为0了就结束了,你们想想,全部的整数除以2是否是必定可以最终获得0。换句话说,全部的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会,整数永远能够用二进制精确表示 ,但小数就不必定了。

注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?一样二进制系统也没法准确表示1/10。这也就解释了为何浮点型减法出现了"减不尽"的精度丢失问题。

我要回帖

更多关于 10亿用科学计数法怎么表示 的文章

 

随机推荐