`
ethen
  • 浏览: 119740 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

精度溢出问题解决

UP 
阅读更多

float和double型的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和double型的位数宽度,就会出现“精度溢出”。所以float和double型是为了科学计算而设计的,并不适合精确的十进制计算.

就像一个十进制的小数,要不断地乘以2取整,但在这个过程中可能会一直循环下去,这就造成了数据的不精确。

所以在必须要求数据的精确度时,不能使用float和double.

public class Test{

public static void main(String[] args)

{

System.out.println(0.05+0.01);

System.out.println(1.0-0.42);

System.out.println(4.015*100);

System.out.println(123.3/100);

}

}

输出结果为:

0.060000000000000005

0.5800000000000001

401.49999999999994

1.2329999999999999

BigDecimal类可解决计算精度问题可使用BigDecimal类创建一个封装类。封装加减乘除操作

例:对一个小数进行指定位数的四舍五入:

BigDecimal bd = new BigDecimal("0.9851095");

BigDecimal one = new BigDecimal("1");

System.out.println(bd.divide(one, 3, BigDecimal.ROUND_HALF_UP));

BigDecimal中还有很多相关的数值之间的计算方法,以及精确到的位数和四舍五入等

分享到:
评论

相关推荐

    js精度溢出解决方案

    一般参数值不能超过16位。如果超出16都是用0替代,导致我们查询不到自己想要的结果,本文将介绍如何处理这种现象

    Javascript 浮点运算精度问题分析与解决

    浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的: 十进制 二进制0.1 0.0001 1001 1001 1001 …0.2 0.0011 0011 0011 0011 …0.3 0.0100 1100 1100 1100 …0.4 0.0110 0110 0110...

    高精度计算 加减乘除幂运算(较大的数之间的运算)

    加减乘除幂运算等等的告警运算算法。。可以解决数据溢出问题哦

    研究论文-基于NystrÖm方法的电影推荐算法.pdf

    提出的NystrÖm方法提取特征的算法解决了因矩阵规模较大发生溢出的问题,NMF方法能保证提取特征的精度,将2种方法相结合,不仅能够加快计算的速度,同时也能提高系统的推荐效率。最后通过真实的900个用户对1 500部...

    将TS流文件发送到以太网络上(源码)

    如果这种同步方式,长时间发送,确实有精度问题,希望有同志给出例证和解决方案(除了使用GPS卫星时间以外的方案...)。以便我改进。 demo中根据以太网通常的MTU值直接按7个TS包进行封装: SetGetTsPacketDataCB...

    论文研究-产品信息集成中的语义MDA方法.pdf

    研究并分析了位置式PID不同算式的特点,完成了浮、定点PID控制器的硬件实现,提出了溢出、饱和等问题的解决方法,单次运算时间分别达480 ns、120 ns,并对两种控制器的性能进行了分析和比较。设计了单精度浮点数和16...

    Course--Debugging-and-Fixing-Common-JavaScript-Errors

    说明:javaScript的浮点运算存在溢出舍入精度问题。 问题:新日期(2016年5月31日)答案:2016年7月1日 说明:月份基于日期为零。 这指定6月31日,溢出到7月1日。 问题:new Array(0,1,Array(2))应答:[0,...

    单片机电子时钟时间误差如何调整最有效?

    于是,尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意,只好每过一段时间手动调整一次。那么,是否可使时钟走时更精确些呢?现探讨如下:一、误差原因分析1.单片机电子时钟的计时脉冲基准,是由外部...

    EDA/PLD中的基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应...

    利用溢出监测移位结构解决了定点运算的动态范围问题。经过实验验证,各项指标均达到了设计要求。 关键词:FFT FPGA 蝶形运算空间太阳望远镜项目是我国太阳物理学家为了实现对太阳的高分辨率观测而提出的科学计划。它...

    计算机应用基础选择题(08年).doc

    在科学计算时,经常会遇到"溢出",这是指()。 计算机出故障了 数值超出了内存范围 数值超出了变量的表示范围 数值超出了机器位所表示的范围 .人们通常用十六进制,而不用二进制书写计算机中的数,是因为( )。 ...

    大芯径大数值孔径阶跃光纤传导模特征方程求解

    从而解决了求解大芯径、大数值孔径阶跃光纤的特征方程时,贝塞尔函数溢出双精度浮点数表示范围的问题。分别对多模石英光纤和大芯径大数值孔径的聚合物光纤的传导模特征方程进行了求解,石英光纤的传导模特征值计算...

    OFDM系统中DAGC的应用研究及FPGA实现

    要:介绍IDFT/DFT可精度在OFDM系统基带解调中的重要性,分析定点化DFT输入功率对其精度的影响,并在此基础上采用数字自动增益控制技术用于DFT前端,以解决过大输入信号动态范围所造成的DFT输出信噪比恶化的问题。...

    EDA/PLD中的OFDM系统中DAGC的应用研究及FPGA实现

    要:介绍IDFT/DFT可精度在OFDM系统基带解调中的重要性,分析定点化DFT输入功率对其精度的影响,并在此基础上采用数字自动增益控制技术用于DFT前端,以解决过大输入信号动态范围所造成的DFT输出信噪比恶化的问题。...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    你必须知道的495个C语言问题

    这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char*p1,p2;我在使用p2的时候报错了。 1.6 我想声明一个指针,并为它分配一些空间,但却...

    非接触液位测量技术

    他们只需要当液位达到警戒线时的早期预警,以及当液体溢出容器或容器空了时的警报。因此,简单的机械检测装置仍被广泛使用,并且应用情况良好。通常在现场有全程的使用记录并提供可靠服务。然而,当液位检测需要在...

    同步发电机原动系统转子转速测量新方法

    但该方法测量周期长且在低速时会发生计数器溢出从而使系统控制效果变差出现“爬坡”现象,将锁相环技术引入可以很好的解决这一问题,可以直接获得始终跟随原动机转子速度变化的测速值,测速精度高、应用简单。...

    工业电子中的同步发电机原动系统转子转速测量新方法

    但该方法测量周期长且在低速时会发生计数器溢出从而使系统控制效果变差出现“爬坡”现象,将锁相环技术引入可以很好的解决这一问题,可以直接获得始终跟随原动机转子速度变化的测速值,测速精度高、应用简单。...

Global site tag (gtag.js) - Google Analytics