数字精确计算工具类 -自用

import java.math.BigDecimal;  
     
 
   public class Arith {  
         
       // 默认除法运算精度  
       private static final int DEF_DIV_SCALE = 10;  
     
       // 这个类不能实例化  
       private Arith() {  
             
       }  
     
       /**
        * 提供精确的加法运算     
        * @param v1           被加数
        * @param v2            加数
        * @return 两个参数的和
        */  
       public static double add(double v1, double v2) {  
           BigDecimal b1 = new BigDecimal(Double.toString(v1));  
           BigDecimal b2 = new BigDecimal(Double.toString(v2));  
           return b1.add(b2).doubleValue();  
       }  
     
       /**
        * 提供精确的减法运算
        
        * @param v1            被减数
        * @param v2            减数
        * @return 两个参数的差
        */  
       public static double sub(double v1, double v2) {  
           BigDecimal b1 = new BigDecimal(Double.toString(v1));  
           BigDecimal b2 = new BigDecimal(Double.toString(v2));  
           return b1.subtract(b2).doubleValue();  
       }  
     
       /**
        * 提供精确的乘法运算     
        * @param v1            被乘数
        * @param v2            乘数
        * @return 两个参数的积
        */  
       public static double mul(double v1, double v2) {  
           BigDecimal b1 = new BigDecimal(Double.toString(v1));  
           BigDecimal b2 = new BigDecimal(Double.toString(v2));  
           return b1.multiply(b2).doubleValue();  
       }  
     
       /**
        * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入   
        * @param v1            被除数
        * @param v2            除数
        * @return 两个参数的商
        */  
       public static double div(double v1, double v2) {  
           return div(v1, v2, DEF_DIV_SCALE);  
       }  
     
       /**
        * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。     
        * @param v1            被除数
        * @param v2            除数
        * @param scale         表示表示需要精确到小数点以后几位。
        * @return 两个参数的商
        */  
       public static double div(double v1, double v2, int scale) {  
           if (scale < 0) {  
               throw new IllegalArgumentException(  
                       "The scale must be a positive integer or zero");  
           }  
           BigDecimal b1 = new BigDecimal(Double.toString(v1));  
           BigDecimal b2 = new BigDecimal(Double.toString(v2));  
           return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  
       }  
     
       /**
        * 提供精确的小数位四舍五入处理。   
        * @param v           需要四舍五入的数字
        * @param scale       小数点后保留几位
        * @return 四舍五入后的结果
        */  
       public static double round(double v, int scale) {  
           if (scale < 0) {  
               throw new IllegalArgumentException(  
                       "The scale must be a positive integer or zero");  
           }  
           BigDecimal b = new BigDecimal(Double.toString(v));  
           BigDecimal one = new BigDecimal("1");  
           return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  
       }  
   }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字逻辑综合工具实践-DC(Design Compiler)是一种常用的数字电路设计综合工具,用于将高级语言或RTL(Register Transfer Level)描述的电路代码转化为门级网表,为后续物理布局布线提供基础。 DC具有以下几个主要功能和特点: 1. RTL综合:DC可以将高级语言(如Verilog或VHDL)编写的RTL描述代码转换为门级网表。通过RTL综合,设计工程师可以将抽象级别的设计逻辑转化为底层的门级逻辑,为后续的物理实现提供基础。 2. 优化功能:DC能够根据用户设定的综合约束进行逻辑优化,包括时序约束、功耗约束和布局约束等。综合工具会尽可能地优化电路,以满足用户的性能需求,并尽量减少功耗,提高面积利用率。 3. 时序分析:DC可以进行时序分析,帮助设计工程师评估电路的工作频率、时序要求是否满足。通过时序分析,可以预测电路的最大工作频率,从而保证电路在实际应用中能够正常工作。 4. 物理约束:DC可以根据用户设定的物理约束进行综合,包括布局约束、布线约束等。通过物理约束的设定,可以将综合工具生成的逻辑网表与实际布局布线的规范相匹配,提高物理实现的可靠性和可制造性。 数字逻辑综合工具实践-DC在现代集成电路设计中扮演着重要的角色。它可以将高级设计逻辑转化为底层门级逻辑,为后续的布局布线提供基础。它具有综合优化、时序分析和物理约束等功能,能够帮助设计工程师提高设计的性能、功耗和可靠性。在实际应用中,DC可以减少设计工程师的工作量,提高设计的效率和质量。因此,数字逻辑综合工具实践-DC是现代数字电路设计不可或缺的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值