www.3112.net > jAvA的舍入误差问题

jAvA的舍入误差问题

关于double和float的精度问题,在进行数值运算时,如果有float或者double类型的浮点数参与计算时,偶尔会出现结果不准确的情况.浮点数在计算机中是无法进行准确表示的,比如0.1在计算机中只是一个近似值,因此对浮点数运算结果具有不可预见性.如果两个浮点操作数的误差就能相互抵消,计算结果就能正确.,比如0.3+0.4.所以一个有误差,一个没误差.参考:http://www.csdn123.com/html/blogs/20130818/55035.htm

java.math.BigDecimal 不可变的、任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是

舍入误差基本正确.补充一点:舍入误差小于2-8就是2的-8次方,等于0.00390625,约等于0.004.1、整数的二进制转换: 采用“基数除法”,具体步骤如下:(1)将给定的十进制整数除以基数2,余数便是等值的二进制的最低位.(2)将上一步的商再除以基数2,余数便是等值的二进制数的次低位.(3)重复步骤2,直到最后所得的商

误差舍入误差在数值计算过程中,由于计算工具的限制,我们往往对一些数进行四舍五入,只保留前几位数作为该数的近似值,这种由舍入产生的误差成为舍入误差

JAVA的基本数据类型不能完全准确的表达一个小数,所以你在以后的编程中一定要注意这点.尤其涉及到金额计算和精确计算的,一定要用BigDecimal来计算

因为a的值比20大很多,a+20的理论值应该是12345678920,而一个浮点型变量只能保证的有效数字的7位,后面的数字是无意义的 ,因此并不能准确地表示该数.运行的结果都是12345678848.00000,可以看到,对于这个数来说,前八位是准备的,后几位是不准确的,把20加在后几位上,是无意义的!!

在实际计算中遇到的数可能位数很多,甚至是无穷小数,如π,√3,1/3等,由于数值计算是按有限位进行的,例如用计算机做数值计算时,由于计算机位数是有限的,对超过位数的数字就要进行舍入.此外,在做乘法,除法时,得到的积和商都只能保留一定的位数,这也要舍入,这种由于在计算过程中对数进行舍入而引起的误差,称为舍入误差.例如,用3.1416作π的近似值产生的误差就是舍入误差.舍入误差小于2-8,是不是就是精确到第8位啊,所以0.78=0.1100011101≈0.11000111 可以吗?

网站地图

All rights reserved Powered by www.3112.net

copyright ©right 2010-2021。
www.3112.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com