×

浮点运算和整型运算的区别

浮点运算和整型运算的区别(java中整除和浮点除什么区别)

admin admin 发表于2024-02-02 13:15:27 浏览18 评论0

抢沙发发表评论

本篇文章给大家谈谈浮点运算和整型运算的区别,以及java中整除和浮点除什么区别对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

java中整除和浮点除什么区别

被除数和除数都为整数即为整除,结果也为整数,如果有余数,则忽略余数,比如5/2结果为2。被除数和除数只要有一个是浮点数(小数)即为浮点除,结果为浮点数,比如5.0/2结果为2.5

什么是整数运算能力,什么是浮点运算能力

这两种运算都是处理运算的。在之前的最开始的CPU里面是没有浮点运算单元的,只有整点运算单元,那时候 的机器只能在处理整点运算上面显得得心应手,但是你要计算浮点运算,却需要电脑上的程序(软件)来计算,电脑的硬件并不能处理。也或者是你可以自己从市场上买一个浮点运算单元插在自己的电脑主机上,当做外设补充CPU本身的不足。在当时之所以没有集成浮点元算在CPU内部是受价格因素的影响,当然也有技术方面的影响。现在随着技术发展,芯片的价格也越来越便宜,浮点和整点都已集成在CPU内部。而且他们的运算速度也越来越快,处理数据的功能也愈加强大。只是从课堂上老师口中听来的,还望有真正深入了解的补充。

弱问:浮点运算和整型运算的区别

没有区别,都是计算除法要说有区别就是,除数和被除数都是整型数据时,会得到结果的整数部分,小数部分被舍弃,而浮点数除后保留小数部分取值。

CPU浮点运算和整点运算的区别

计算机的运算是通过CPU进行的。最基本的运算是算术运算,即+,-,*,/。参与算术的值和理论数学中是不同的,因为“一尺之棰,日取其半,永世不竭”。在计算机内部表示的只能是精确数字,所以无限小数是不可能表达的。这是第一个观点:计算机的数值,与人接触的数值有所不同。 第二个观点:计算机的运算实现,与人不同。计算机内部是通过电路的通断开业控制两种状态,以至表达二进制数;而人表达的是十进制数。 所以,这就决定了计算机,可以直接用加法器来完成整数(其实是非负整数)的算术运算,进一步加一个符号位(不管是原码还是补码)来表示负整数的运算,所以,即使是最早的CPU8088/8086,也支持这种类型的运算。但加法器不能处理浮点数据的运算,简单的说就是有小数点的数值。对这种数据,首先得有一种好的浮点数表示法。最终采用的是:尾数、阶数符号位各占一位,然后再对其余数位尾数、阶数的有效数位合理分配。也就是说,采用的是二进制的科学计数法。 在运算时,远远要比整类型的数值运算复杂,因为不仅尾数要参与运算,阶数也要参与,并且需要对尾数和阶数的符号位都进行处理,所以,开始的CPU并没有能力进行浮点运算(8088/8086,80286,80386SX),需要浮点运算时,由CPU通过软件模拟来实现,所以,进行浮点运算时就会慢很多。 为提高计算机性能,Intel公司为80386SX CPU设计了浮点运算协处理器80387,配合使用就提高了运算速度(80486SX配套的是80487)。同期,Intel公司也生产了集成了协处理器的CPU:80386DX、80486DX。到了奔腾时代,生产厂商把协处理全部集成在CPU内部,成为不可缺少的部分,这样就不在有带/不带协处理器的CPU一说了。但整类型数值运算是由加法器完成的,小数类型是由集成在CPU内部的数学协处理器完成的。现在,所有数值运算都是由协处理器完成的,哪怕没有分离出来。

整数与浮点数知识都在这里了

首先我们来讲一讲背景,整数在不同的平台下可能会有不同的大小,一般来说都是4个字节,也就是32位,但是在一些老的平台上可能会占用两个字节,也就是16位。这里指定整数就是32位的整数,然后对32位的整数的表示范围进行分析。

整数要分正数和负数,但是对于一个无符号整数来说,他只有正,标准中是用第一位标志正负,0代表正,1代表负。因为无符号整数不用一位去标识,所以对于无符号整数来说,所有位数为都为1即为最大,都为0为最小。

对于一个位数为w的二进制数: 那么无符号整数计算方式为: 下面测验一下最大的无符号整数:

0b表示二进制。

与一般人的直觉不同,有符号整数的表示并不是单独用一位来表示正负,而是采用补码的方式最大限度的利用了所有的位数。 对于一个位数为w的二进制数: 补码计算方式为: 根据等比数列求和公式:补码最后一项的最大和 (所有 均为1时) 为: 所以在第一位为1时,就决定了这一定是一个负数,相反的,在第一位为0时,说明一定为正数,那么其表示范围为多少?做实验:

为什么要用补码的方式而不是像无符号整数那样计算,然后单独用一位表示正负呢? 如果我们用一位来表示正负,其他的按照无符号整数那么计算,那么0就会出现两次,浪费了一个数字的表示空间。

正如之前计算的一样:

以下内容的M, E, s皆遵从上述定义。

也就是说对于一个32位的浮点数float来说,他有一位是符号位,23位是尾数位,8位为阶码位。对于一个64位的double浮点数来说他有一位是符号位,52位是尾数位,11位阶码位。

可以看到,尾数位越多,那么这个浮点数能表示的数字就越精确,如果阶码位越多,那么浮点数能表示的范围就越大,但是同样的,它能表示的这个不连续区间的间隔就越大, 说白了计算机是用一系列固定数量的离散点描述浮点数,离散点个数是确定的,如果想表示更大的浮点数,就得接受离散点之间的相对举例增大,也就是说浮点数不够精确。

下面以单精度浮点数为例,解释一下具体的浮点数计算,双精度浮点数和单精度浮点数大同小异。

先来说一说阶码,如果不用符号位或者补码的方式,那就是没有正负的,对于指数来说,负指数代表的是除法,只有这样才会出现浮点数,IEEE754标准人为的规定了一个偏移值,阶码的 计算值减去这个偏移值 才是真实的阶码值。

这里有一个小工具: IIEEE754计算器

对于32位浮点数: , 阶码全为0和全为1是两种特殊情况,会走不同的逻辑: 所以阶码本身的范围为: 阶码的实际表示范围为: ,

假设尾数值的二进制转十进制值为 ,那么实际值 ,例如:

或许你注意到了,按照之前的表示方式,0是没有办法精确表示的,对于一个32位的正浮点数,最接近0的数为: ,问题很大。

所以指定了,当阶码位全为0时,走入非规格化逻辑:

阶码位全为1时为特殊情况:

最后以一个小例子结尾: 如果以较高精度输出 ,f会是准确值吗?

浮点数并不像整数那样可靠,所以在计算浮点数的时候,你的加减乘除的顺序可能就会得到不同的计算结果,所以对待浮点数一定要谨慎,在对浮点数精度要求比较高的情况下,可以考虑使用BigDecimal。

整数和浮点数的区别

整数没有小数部分;浮点数可以有小数部分。 浮点数可以表示比整数范围大得多的数。 对于一些算术运算(例如两个很大的数相减),使用浮点数会损失更多精度。 因为在任何区间内(比如1.0和2.0之间)都存在无穷多个实数,所以计算机浮点数不能表示

关于浮点运算和整型运算的区别和java中整除和浮点除什么区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。