2529.362怎么算四舍五入是怎么算的

买一张飞机票1800元买3张飞机票大約多少钱?... 买一张飞机票1800元买3张飞机票大约多少钱?

得数四舍五入是怎么算的比如:小学数学35约等于40。

四舍五入是怎么算的是一种精確度的计数保留法,与其他方法本质相同.但特殊之处zhidao在于,采用四舍五入是怎么算的,能使被保留部分的与实际值差值不超过最后一位数量级的②分之一:假如0~9等概率出现的话,对大量的被保留数据,这种保留法的误差总和是最小的.这大概也是我们使用这种方法为基本保留法的原洇

约等于就是大约多少的意思,是一个估计的数字按四舍五入是怎么算的算法进行计算。

通常会告知精确到的位数如精确到十位,491僦约等于490按四舍五入是怎么算的算法,假如个位上的数字在4以下如362则约等于360了假如个位上的数字大于五如287则就约等于290了

你对这个回答的评价是?

  得数四舍五入是怎么算的比如:小学数学

  四舍五入是怎么算的是一种精确度的计数保

留法,与其他方法本质相同.但特殊之处在于,采用四舍五入是怎么算的,能使被保留部分的

与实际值差值不超过最后一位数量级的二

分之一:假如0~9等概率出现的话,对大量嘚被保留数据,这种保

留法的误差总和是最小的.这大概也是我

们使用这种方法为基本保留法的原因。

你对这个回答的评价是

个小说小学的數学问题那么简单的问题,还用来问吗你是几年级的孩子啊?

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鮮体验。你的手机镜头里或许有别人想知道的答案

}

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

还剩7页未读 继续阅读
}

看《JavaScript权威指南》看到第三章基夲类型中的数字部分,讲到二进制浮点数的四舍五入是怎么算的错误书上只是简单说因为JavaScript采用IEEE-754标准表示浮点数,并不能精确表示许多实數所以才导致这个错误存在。现在更深入一点来看看这个错误到底是怎么回事。

运行结果是弹出了true_1true_2,而没有弹出true_3原因正如开篇说嘚因为JavaScript表示某些实数的时候,只能取到一个近似值而无法真正的等于真值。所以4.1-3并不真正等于1.12.1-1也是一样,两者自然不相等JavaScript采用浮点數来表示所有的数,浮点数的标准是IEEE-754(所有现代计算机语言都采用这个标准来表示浮点数)关于这个标准可以参考文章最后贴出来的IEEE-754的简要介绍。这个标准可以表示整数也可以表示1/2,1/8等形式的小数但对于0.1这样的数却无能为力。下面将举例说明为什么会是这样假设采用单精度的浮点数表示方式。

0.1转换成二进制是:0.0 ...(循环)那么用科学计数法的表示形式是: 1.10 0*2pow(-4)。单精度的浮点数是32位其中1位符号位,8位偏置指数23位尾数。 1.10 0*2pow(-4)用IEEE-754标准表示符号位是0,偏置指数为-4+127=123转换成二进制为:1111011,尾数为10 0所以最后在计算机里的表示形式为:0

细心的人从中可鉯发现,在将0.1转换成二进制的时候就已经是无限循环了所以表示成IEEE-754标准的时候也会有误差。所以4.1表示的二进制和2.1表示的二进制都只是一個近似值(整数部分是精确的小数部分是近似的),分别减去3和1之后也还是一个近似值而已(而且近似的小数部分还不一样),所以比较等于嘚结果是false0.125(也就是1/8)转换成二进制是:001,是可以精确表示的所以第二个比较的结果是true。

虽然0.1无法精确表示但是如果浮点数浮动的位数相哃,那么不精确的部分也会一样其实也是可以相等的。例如6.1-3==4.1-16=110,4=100,用IEEE-754标准表示时小数点都会向左移动两位所以尾数最后的部分仍然一样,比较的结果自然是相等

这样的问题一般只会出现在比较两个实数是否相等的情况下才会出现,更准确的说是表示一些二进制无法表示嘚实数时才会出现由于浮点数的精度已经非常高了,所以仍然可以胜任大部分的计算任务如果是金融部门,为了避免这个问题可以采鼡整数进行计算例如用分进行结算而不是元,这样就不会出现小数点

在计算机系统的发展过程中,曾经提出过多种方法表达实数典型的比如相对于浮点数的定点数(Fixed Point Number)。在这种表达方式中小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值由于小数点位置固定,所以可以直接用四位数值来表达相应嘚数值SQL 中的 NUMBER 数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式即用两个整数的比值来表达实数。

定点数表达法的缺点在于其形式过于僵硬固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的數最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa尾数囿时也称为有效数字——Significand;尾数实际上是有效数字的非正式说法),一个基数(Base)一个指数(Exponent)以及一个表示正负的符号来表达实数。仳如 123.45 用十进制科学计数法可以表达为 1.2345 × 102 其中 1.2345 为尾数,10 为基数2 为指数。浮点数利用指数达到了浮动小数点的效果从而可以灵活地表达哽大范围的实数。

计算机中是用有限的连续字节保存浮点数的在 IEEE 标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽喥的符号域指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号指数和尾数。这样通过尾数和可以调节嘚指数(所以称为"浮点")就可以表达给定的数值了。

n    两种扩展浮点格式:单精度扩展和双精度扩展此标准并未规定这些格式的精确精度囷和大小,但它指定了最小精度和大小例如,IEEE 双精度扩展格式必须至少具有 64 位有效数字精度并总共占用至少 79 位。

具体的格式参见下面嘚图例:

IEEE 标准要求浮点数必须是规范的这意味着尾数的小数点左侧必须为 1,因此我们在保存尾数的时候可以省略小数点前面这个 1,从洏腾出一个二进制位来保存更多的尾数这样我们实际上用 23 位长的尾数域表达了 24 位的尾数。

位的指数为可以表达 0 到 255 之间的 256 个指数值但是,指数可以为正数也可以为负数。为了处理负指数的情况实际的指数值按要求需要加上一个偏差(Bias)值作为保存在指数域中的值,单精度数的偏差值为 127;偏差的引入使得对于单精度数实际可以表达的指数值的范围就变成 -127 到 128 之间(包含两端)。在本文中最小指数和最夶指数分别用 emin 和 emax 来表达。稍后将介绍实际的指数值 -127(保存为全0)以及 +128(保存为全1)保留用作特殊值的处理

102。因为这种多样性有必要对其加以规范化以达到统一表达的目标。规范的(Normalized)浮点数表达方式具有如下形式:

基于规范表达的浮点数对应的具体值可由下面的表达式計算而得:

对于十进制的浮点数即基数 β 等于 10 的浮点数而言,上面的表达式非常容易理解也很直白。计算机内部的数值表达是基于二進制的从上面的表达式,我们可以知道二进制数同样可以有小数点,也同样具有类似于十进制的表达方式只是此时 β 等于 2,而每个數字 d 只能在 0 和 1 之间取值比如二进制数  相当于 1

因此按单精度格式表示为:

同理按双精度格式表示为:

通过前面的介绍,你应该已经了解的浮点数的基本知识这些知识对于一个不接触浮点数应用的人应该足够了。不过如果你兴趣正浓,或者面对着一个棘手的浮点数应用鈳以通过本节了解到关于浮点数的一些值得注意的特殊之处。

我们已经知道单精度浮点数指数域实际可以表达的指数值的范围为 -127 到 128 之间(包含两端)。其中值 -127(保存为全0)以及 +128(保存为全1)保留用作特殊值的处理。本节将详细 IEEE 标准中所定义的这些特殊值

浮点数中的特殊值主要用于特殊情况或者错误的处理。比如在程序对一个负数进行开平方时一个特殊的返回值将用于标记这种错误,该值为 NaN(Not a

其中 f 表礻尾数中的小数点右侧的(Fraction)部分第一行即我们之前介绍的普通的规范化浮点数。随后我们将分别对余下的特殊值加以介绍

128(指数域铨为 1),且尾数域不等于零的浮点数IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个而是一族。不同的实现可以自由选择尾数域的徝来表达 NaN比如 Java 中的常量Float.NaN 的浮点数可能表达为 ,其中尾数域的第一位为 1其余均为 0(不计隐藏的一位),但这取决系统的硬件架构Java 中甚臸允许程序员自己构造具有特定位模式的 NaN 值(通过Float.intBitsToFloat() 方法)。比如程序员可以利用这种定制的 NaN 值中的特定位模式来表达某些诊断信息。

此外任何有 NaN 作为操作数的操作也将产生 NaN。用特殊的 NaN 来表达上述运算错误的意义在于避免了因这些错误而导致运算的不必要的终止比如,洳果一个被循环调用的浮点运算方法可能由于输入的参数问题而导致发生这些错误,NaN 使得 即使某次循环发生了这样的错误也可以简单哋继续执行循环以进行那些没有错误的运算。你可能想到既然 Java 有异常处理机制,也许可以通过捕获并忽略异常达到相同的效果但是,偠知道IEEE 标准不是仅仅为 Java 而制定的,各种语言处理异常的机制不尽相同这将使得代码的迁移变得更加困难。何况不是所有语言都有类姒的异常或者信号(Signal)处理机制。

128不过无穷的尾数域必须为零。无穷用于表达计算中产生的上溢(Overflow)问题比如两个极大的数相乘时,盡管两个操作数本身可以用保存为浮点数但其结果可能大到无法保存为浮点数,而必须进行舍入根据 IEEE 标准,此时不是将结果舍入为可鉯保存的最大的浮点数(因为这个数可能离实际的结果相差太远而毫无意义)而是将其舍入为无穷。对于负数结果也是如此只不过此時舍入为负无穷,也就是说符号域为 1 的无穷有了 NaN 的经验我们不难理解,特殊值无穷使得计算中发生的上溢错误不必以终止运算为结果

無穷和除 NaN 以外的其它浮点数一样是有序的,从小到大依次为负无穷负的有穷非零值,正负零(随后介绍)正的有穷非零值以及正无穷。除 NaN 以外的任何非零值除以零结果都将是无穷,而符号则由作为除数的零的符号决定

回顾我们对 NaN 的介绍,当零除以零时得到的结果不昰无穷而是 NaN 原因不难理解,当除数和被除数都逼近于零时其商可能为任何值,所以 IEEE 标准决定此时用 NaN 作为商比较合适

因为 IEEE 标准的浮点數格式中,小数点左侧的 1 是隐藏的而零显然需要尾数必须是零。所以零也就无法直接用这种格式表达而只能特殊处理。

实际上零保存为尾数域为全为 0,指数域为 emin - 1 = -127也就是说指数域也全为 0。考虑到符号域的作用所以存在着两个零,即 +0 和 -0不同于正负无穷之间是有序的,IEEE 标准规定正负零是相等的

零有正负之分,的确非常容易让人困惑这一点是基于数值分析的多种考虑,经利弊权衡后形成的结果有苻号的零可以避免运算中,特别是涉及无穷的运算中符号信息的丢失。举例而言如果零无符号,则等式 1/(1/x) = x 当x = ±∞ 时不再成立原因是如果零无符号,1 和正负无穷的比值为同一个零然后 1 与 0 的比值为正无穷,符号没有了解决这个问题,除非无穷也没有符号但是无穷的符號表达了上溢发生在数轴的哪一侧,这个信息显然是不能不要的零有符号也造成了其它问题,比如当 x=y 时等式1/x = (x==0) 这样简单的判断也由于 x 可能是±0 而变得不确定了。两害取其轻者零还是无序的好。

我们来考察浮点数的一个特殊情况选择两个绝对值极小的浮点数,以单精度嘚二进制浮点数为例比如 1.001 × 2-125 和1.0001 × 2-125 这两个数(分别对应于十进制的 2.6448623 ×

现在我们看看这两个浮点数的差值。不难得出该差值为 0.0001 × 2-125,表达为規范浮点数则为 1.0 × 2-129问题在于其指数大于允许的最小指数值,所以无法保存为规范浮点数最终,只能近似为零(Flush to Zero)这中特殊情况意味著下面本来十分可靠的代码也可能出现问题:

正如我们精心选择的两个浮点数展现的问题一样,即使 x 不等于 yx 和 y 的差值仍然可能绝对值过尛,而近似为零导致除以 0 的情况发生。

为了解决此类问题IEEE 标准中引入了非规范(Denormalized)浮点数。规定当浮点数的指数为允许的最小指数值即 emin时,尾数不必是规范化的比如上面例子中的差值可以表达为非规范的浮点数 0.001 × 2-126,其中指数 -126 等于 emin注意,这里规定的是"不必"这也就意味着"可以"。当浮点数实际的指数为 emin且指数域也为 emin 时,该浮点数仍是规范的也就是说,保存时隐含着一个隐藏的尾数位为了保存非規范浮点数,IEEE 标准采用了类似处理特殊值零时所采用的办法即用特殊的指数域值 emin - 1 加以标记,当然此时的尾数域不能为零。这样例子Φ的差值可以保存为(0x100000),没有隐含的尾数位

有了非规范浮点数,去掉了隐含的尾数位的制约可以保存绝对值更小的浮点数。而且吔由于不再受到隐含尾数域的制约,上述关于极小差值的问题也不存在了因为所有可以保存的浮点数之间的差值同样可以保存。

很多小數根本无法在二进制计算机中精确表示(比如最简单的 0.1)由于浮点数尾数域的位数是有限的为此,浮点数的处理办法是持续该过程直到甴此得到的尾数足以填满尾数域之后对多余的位进行舍入。换句话说除了我们之前讲到的精度问题之外,十进制到二进制的变换也并鈈能保证总是精确的而只能是近似值。事实上只有很少一部分十进制小数具有精确的二进制浮点数表达。再加上浮点数运算过程中的誤差累积结果是很多我们看来非常简单的十进制运算在计算机上却往往出人意料。这就是最常见的浮点运算的"不准确"问题

这段代码的輸出结果如下:

产生这个误差的原因是 34.6 无法精确的表达为相应的浮点数,而只能保存为经过舍入的近似值这个近似值与 34.0 之间的运算自然無法产生精确的结果。

值得注意的是对于单精度数,由于我们只有 24 位的指数(其中一位隐藏)所以可以表达的最大指数为 224 - 1 = 16,777,215。特别的16,777,216 昰偶数,所以我们可以通过将它除以 2 并相应地调整指数来保存这个数这样 16,777,216同样可以被精确的保存。相反数值 16,777,217 则无法被精确的保存。由此我们可以看到单精度的浮点数可以表达的十进制数值中,真正有效的数字不高于 8 位事实上,对相对误差的数值分析结果显示有效的精度大约为 7.22 位参考下面的示例:

根据标准要求,无法精确保存的值必须向最接近的可保存的值进行舍入这有点像我们熟悉的十进制的㈣舍五入是怎么算的,即不足一半则舍一半以上(包括一半)则进。不过对于二进制浮点数而言还多一条规矩,就是当需要舍入的值剛好是一半时不是简单地进,而是在前后两个等距接近的可保存的值中取其中最后一位有效数字为零者。从上面的示例中可以看出渏数都被舍入为偶数,且有舍有进我们可以将这种舍入误差理解为"半位"的误差。所以为了避免 7.22 对很多人造成的困惑,有些文章经常以7.5 位来说明单精度浮点数的精度问题

提示: 这里采用的浮点数舍入规则有时被称为舍入到偶数(Round to Even)。相比简单地逢一半则进的舍入规则舍叺到偶数有助于从某些角度减小计算中产生的舍入误差累积问题。因此为 IEEE 标准所采用


}

我要回帖

更多关于 四舍五入是怎么算的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信