精华内容
下载资源
问答
  •  它可以进行大数值的精确却运算,下面介绍一下它的加-减-乘-除以及N次幂的操作操作 import java.math.BigDecimal; public class Test02 { public static void main(String[] args) { BigDecimal n...

    在实际开开发过程中BigDecimal是一个经常用到的类:

      它可以进行大数值的精确却运算,下面介绍一下它的加-减-乘-除以及N次幂的操作操作

    import java.math.BigDecimal;
    
    public class Test02 {
    
        public static void main(String[] args) {
            BigDecimal num1 = new BigDecimal(5000);
            BigDecimal num2 = new BigDecimal(20);
            BigDecimal num3 = new BigDecimal(0);
            BigDecimal num4 = new BigDecimal(20);
            //加法  add
            System.out.println("**********加法运算  add   ****************");
            num3 = num1.add(num2);
            System.out.println(num1+"+"+num2+"="+num3);
            //减法  subtract
            System.out.println("**********减法运算  subtract****************");
            num3 = num1.subtract(num2);
            System.out.println(num1+"-"+num2+"="+num3);
            //除法  divide
            System.out.println("**********除法运算  divide****************");
            num3 = num1.divide(num2);
            System.out.println(num1+"/"+num2+"="+num3);
            //乘法
            System.out.println("**********乘法运算     multiply ****************");
            num3 = num1.multiply(num2);
            System.out.println(num1+"*"+num2+"="+num3);
            //N次幂
            System.out.println("**********N次幂运算   pow****************");
            num3 = num1.pow(2);
            System.out.println(num1+"^"+2+"="+num3);
            //比较  -1 小于   0 等于   1 大于
            System.out.println("**********比较  -1 小于   0 等于   1 大于****************");
            int i = num1.compareTo(num2);
            int j = num4.compareTo(num2);
            int k = num3.compareTo(num2);
            System.out.println(num1+"大于"+num2+"====compareTo结果是"+i);
            System.out.println(num4+"等于"+num2+"====compareTo结果是"+j);
            System.out.println(num3+"小于"+num2+"====compareTo结果是"+k);
            System.out.println(num1+"/"+33+num1.divide(new BigDecimal(33),2, BigDecimal.ROUND_HALF_EVEN)+"保留两位小数"); 
            
        }
    
    }

    运算结果:

    在进行除法运算时很容易出现不整除的现象,不整除就会报出如下错误:

    Exception in thread "main" java.lang.ArithmeticException

     出现此错误时:使用BigDecimal.ROUND_HALF_EVEN  

     

     System.out.println(num1+"/"+33+num1.divide(new BigDecimal(33),2, BigDecimal.ROUND_HALF_EVEN)+"保留两位小数");
    为不整除的书保留两位小数显示

     

    转载于:https://www.cnblogs.com/kuoAT/p/6842207.html

    展开全文
  • 我们知道了 HashMap是什么时候 设置容量大小的,容量大小和容量阀值 是怎么计算,但是有小伙伴 包括我 可能对一点比较好奇 为什么默认容量是16 而且计算是自己容量时候,最终计算出来容量也是2的幂次方...

    前言

    在之前的文章 我分析过HashMap 初始化容量的问题 不清楚的可以看这个。

    经过这篇文章 我们知道了 HashMap是什么时候 设置容量大小的,容量大小和容量的阀值 是怎么计算的,但是有的小伙伴 包括我 可能对一点比较好奇 为什么默认的容量是16 而且计算是自己容量的时候,最终计算出来的容量也是2的幂次方?可能 有的小伙伴知道 这个是为了 降低哈希碰撞率,那是为什么呢?那我们今天就来聊一聊

    分析

    容量计算

        /**
         * Returns a power of two size for the given target capacity.
         */
        static final int tableSizeFor(int cap) {
            int n = cap - 1;
            n |= n >>> 1;
            n |= n >>> 2;
            n |= n >>> 4;
            n |= n >>> 8;
            n |= n >>> 16;
            return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
        }
    

    照顾下 没看之前的文章的小伙伴 还是回顾下

    这个方法是Hashmap里面去计算初始容量需要用的 其目的就是获取一个大于当前传入的cap值的2的最小幂次方的数值。

    看完这句话 感觉好拗口的 ,又是大于 又是小于的 比较懵逼,没事 那我们给出2个栗子:

    • cap:10 这个方法的到值是16 也就是2的4次方
    • cap:17 这个方法的到值是32 也就是2的5次方
    • cap:1000 这个方法的到值是1024 也就是2的10次方

    我相信 看到了这个我相信 小伙伴们 一定知道了吧~

    hash位置计算

        public V put(K key, V value) {
            return putVal(hash(key), key, value, false, true);
        }
        
        static final int hash(Object key) {
            int h;
            return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
        }
        
        final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                       boolean evict) {
            ...
            if ((p = tab[i = (n - 1) & hash]) == null)
                tab[i] = newNode(hash, key, value, null);
            ...
        }       
        
    

    上面是我截取的 计算HashMap 位置的代码

    我们知道 HashMap 里面计算卡槽的位置 是经过了这么几步:

    hash

    首先 我们调用hash这个方法,这个方法 就是回去key的hascode值 然后和hashcode值的右移16位后 的值 做异或处理

    为什么要这么处理呢?

    首先我们知道异或【^】的逻辑运算的规则是 相同为0 不同为1 即:0 ^ 0=0,1 ^ 1=0,1 ^ 0=1,0 ^ 1=1

    与【&】运算的规则 2者都为1 时候结果为1 否则为0 即:0&0=0, 1&1=1 ,1&0=0 ,0^1=0

    顺便也会回顾下 或运算符【|】 规则是 只有有1 那结果就是1 即:0&0=0,1&1=1 ,1&0=1 ,0^1=1

    记住下 上2个逻辑运算符 方法里面会涉及到

    那我们再来回顾下 (h = key.hashCode()) ^ (h >>> 16) ,h >>> 16 这个操作就是 将二进制位往右移16位 空位的用0补足,知道了这个 我们来举个小demo 来看下 这个是要做什么,16为的花 我要写很长一段数组 那我就右移4位吧,举例说明下:

    如果key的hashCode 的二进制值是:1011 0011 那么>>> 4的结果就是0000 1011 那么2者相【^】异或的结果是:

    1011 0011

    0000 1011

    结果: 1011 1000

    看到这样的结果是 高4位的数值 其实没有变化 低4位的数值 是有变化的,这样做的目的是把高4位的影响 降低到低4位中,保证hash后面hash值 在计算位置的时候 减少hash的冲突,具体 可以看下 英文的注释,翻译过来大概就是这个意思!

    (n - 1) & hash

    这个是计算位置的方法 hash 值就是上个方法中 传入过来的

    如果这个是的hash值是 1011 1000 我们的n值就是16,那么就算结果将是这样的
    hash: 1011 1000

    n-1 : 0000 1111

    结果: 0000 1000 10进制数值是:8

    如果这个时候改变hash值是 1011 1100 那么就算结果将是这样的
    hash: 1011 1100

    n-1 : 0000 1111

    结果: 0000 1100 10进制数值是:12

    这个时候 我们看到 随着我们的hash值的不同 的到的index 也是不同的 ,这样能保证hash值 能均分的分配

    但是如果这个是 我们的n长度不是2的幂次方,比如是10 ,那么计算结果是这样的
    hash: 1011 1000

    n-1 : 0000 1001

    结果: 0000 1000 10进制数值是:8

    这个时候 我们还是修改 hash值是 1011 1100 那么就算结果将是这样的
    hash: 1011 1100

    n-1 : 0000 1001

    结果: 0000 1000 10进制数值是:8

    这个时候 我们发现 虽然hash值修改了 但是 我们计算得到的index 还是相同的,就那上面这个例子 如果hash值是 1011 1000, 1011 1100, 1011 1110 计算得到的结果 都是 0000 1000 index 都是8 这样会提高Hash的冲突率,这显然不是我们想要的。

    看到这里 你是否 知道了 为什么都是2的幂次方了么, 因为2的幂次方减掉1后, 二进制的值的 低位都是1,这样就保证了和Hash值 相与【&】后结果 低位都是被保留下来的 这样就可以避免不同的Hash值传入进来 被分配到 同一个卡槽位置 去存储。

    结论

    通过以上的分析 你是否清楚了呢。不清楚的话 多看看 多想想 ,设计是如此的其妙!一个细节都是那么的优秀,值得我们去深究 和学习。

    废话不多说 ,总结一下 hashMap中容量的数值都是2的幂次方 是为了降低hash的冲突,那位什么能降低hash的冲突呢,是因为2的幂次方-1 后的数组的二进制 的低位 全部都是1,这样保证了和hash值与【&】之后 能够完整的保留hash值的低位 这样就避免了不同的hash值过来被分配到一样的hash卡槽中!

    总计完毕!!!!

    展开全文
  • 但是不同精度 比如(float型和string型 直接减法或者比较大小 )则必须用函数 否则会埋很多坑 bcadd 任意精度数相加 bcsub 任意精度数减法 bcmul 乘法, bcdiv除法 bcmod 取余数。 (比%功能更强大) bcpow ...

    php 比较大小的时候如果是同类型同精度的可以直接 加减(用< ,>都可以 )
    但是不同精度的 比如(float型和string型 直接减法或者比较大小 )则必须用函数 否则会埋很多坑

    1. bcadd 任意精度数的相加
    2. bcsub 任意精度数的减法
    3. bcmul 乘法, bcdiv除法
    4. bcmod 取余数。 (比%功能更强大)
    5. bcpow 幂函数运算
    6. bcsqrt 平方根
    7. sqrt 平方根运算
    8. pow求幂
    9. abs 求绝对值
    10. pi 得到圆周率数值
      10.bccomp — 比较
    展开全文
  • LeetCode | 3的幂

    2019-07-10 22:23:18
    一、题目描述 给定一个整数,写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27 输出: true ...循环求然后比较大小,等于时候是是 3 的幂次方,不等于或者大于则不是。 n 大于...

    一、题目描述

    给定一个整数,写一个函数来判断它是否是 3 的幂次方。

    示例 1:

    输入: 27
    输出: true
    

    示例 2:

    输入: 0
    输出: false
    

    示例 3:

    输入: 9
    输出: true
    

    示例 4:

    输入: 45
    输出: false
    

    进阶:
    你能不使用循环或者递归来完成本题吗?

    二、题解思路

    1. 循环求幂然后比较大小,等于的时候是是 3 的幂次方,不等于或者大于则不是。
    2. n 大于0,并且int类型的最大3 的幂次方为1162261467,则n 应该是被取余为0的。

    三、程序实例

    class Solution {
    public:
        bool isPowerOfThree(int n)
        {
            return n > 0 && 1162261467%n == 0;
        }
        
        bool isPowerOfThree1(int n) {
            int i = 0;
            double a = 0;
            while((a = pow(3, i++)) <= n)
            {
                if(a == n)
                    return true;
                else if(a <= n / 7) // 提升效率,太小了则多加一次幂,没研究过什么值的时候最好
                    i++;
            }
            return false;
        }
    };
    
    展开全文
  • 浮点数比较大小

    2020-10-13 22:57:38
    1.基础准备 1.1e+5==100000:e代表科学计数法是以10为底指数(e前面必须要有数字,1也不能省略;为正数,+号可以省略) 2.1e- 2==0.01:e代表科学计数法是以10为底指数(e前面...2.直接比较大小 浮点数...
  • BigDecimal加减乘除/比较大小 BigDecimal简介 BigDecimal 由任意精度整数非标度值 和32 位整数标度 (scale) 组成。如果为零或正数,则标度是小数点后位数。如果为负数,则将该数非标度值乘以 10 负...
  • C/C++ 浮点数大小比较问题

    千次阅读 2018-08-05 19:24:25
    1.c++中浮点数注意 The important rule to remember is that powers of two and integer multiples thereof can be perfectly represented....这句话翻译过来意思就是:需要记住重要规则是,2的幂和它整数倍...
  • 4、利用函数图像比较数与数的大小 一般地,函数y=x^α 叫做函数,其中x是自变量,α是常数. 在同一直角坐标系内作出 y=x,y=x^2,y=x^3,y=x^(1/2),y=x^(-1)的图像。 五个函数的图像及性质 ...
  • 最近看《java核心技术卷I》,开篇几章就提到了BigInteger类,查了下相关文档,在不考虑其效率时候,用作处理WOJ中大整数还是挺有效(BigInteger类可以存储任意大小的数)。 先链接两个比较博文:浅谈 ...
  • 2.用于a和b比较大小的情况,常用快速是带模快速 3.分析一个例子: 3 15=?  15=(1111)2 3e1 * 3e2 * 3e4 * 3e8  给定整数b,其二进制数长度是log2b 4.模板 int qmi(int a,int b,int q) { int ...
  • 矩阵快速幂的模板,需要自己根据实际题目更改矩阵大小和数据类型,以免WA和TLE。经过矩阵乘法上的稀疏矩阵优化和int64的乘法取模幂优化,效率应该比较高。视情况使用mult()函数或直接使用乘法。代码中每个函数有注释...
  • 给定一个灰度图像,找到并显示傅立叶光谱的大小,然后对其进行对数变换和定律变换。 给定灰度图像,对其进行直方图均衡化增强 教程-2 在给定的输入图像上实现Marr-Hildreth边缘检测器和Canny边缘检测器。 仅使用两...
  • 思路一:通过求解级数来和输入比较大小来判定。import java.util.Scanner; /** * 如果一个数字能表示为p^q(^表示运算)且p为一个素数,q为大于1正整数就称这个数叫做超级素数。 * 现在给出一个正整数n,...
  • 由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出”&gt;”,小于则输出”&lt;”,等于则输出”=”。 import java.util.Scanner; public c...
  • 'get_cluster_sizes',从簇标签4D矩阵获取簇大小。 'coarse_graining',通过粗粒度方法获得数据空间下采样。 'phase_shuffling_4D',将随机相位添加到来自4D矩阵时间序列中。 'permutation_test',用于比较...
  • 第一个是高精度的大小比较: java BigDecimal比较大小 BigDecimal a=BigDecimal.valueOf(1.0); BigDecimal b=BigDecimal.valueOf(1.000);   if(a.compareTo(b)==0) 结果是true   a.compareTo
  • 题目链接:UOJ241先吐槽一下UOJ,额...(定义两个点相对为去掉这两个点后环能被分成相同大小的两段)思路: 如果n是奇数,就转化为了一个比较简单递推,可以像题解中那样开两维,也可以直接写,如果第n-1个和第1个
  • 题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k<8,n<100000001) 思路: ... 由于k是比较小,但是... M的大小应该是2k*2k,所以当k稍微大一些就不合适存储这个矩阵了,而且里面大部分...
  • 数字比较

    2018-10-14 11:11:37
    由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出"&gt;",小于则输出"&lt;",等于则输出"="。   输入描述: ...
  • 这题让比较a^b与c^d的大小。1<=a,b,c,d<=1000. 显然这题没法直接做,要利用对数来求,但是在math库中有关的对数函数返回的都是浮点数,所以这又要涉及到eps问题。 其它就没有什么需要注意的了,我用的是log...
  • 数字比较-java

    千次阅读 2019-02-14 21:54:56
    由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较x的y此房和y的x此房的大小,如果前者大于后者,输出 “&gt;”,小于则输出"&lt;",等于则输出"="。 输入描述: ...
  • 数字比较-牛客网

    2018-08-14 09:37:09
    由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出”&gt;”,小于则输出”&lt;”,等于则输出”=”。 输入描述: 两个数字x和y。 满足1 &...
  • 比较运算符:比较运算符:用于比较两个值的大小关系,返回值是一个布尔值。字符串之间的比较:按照字典排序比较的。(实际上按照编码顺序来排序的。)小写的字母比大写的字母的顺序要高。比较的步骤:不同类型的比较...
  • HTTP POST GET 比较

    2011-05-18 19:58:00
    1)用途: get 一般用于获取、查询资源信息,get是等的,post一般...则用 base64转换,post请求相比而言,安全性要好一点,3)传输数据的大小: get对url的长度大小也是有限制的,在ie下不能超过2083k,在理论上...
  • 它以最小块大小(为2的幂级别工作,例如,文件大小在16 KiB和32 KiB之间时,Bincomerge首先会寻找所有大于16 KiB公共块。 然后,它将搜索所有大于8 KiB,然后是4KiB,2KiB,1024字节公用...由于它按级别...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 179
精华内容 71
关键字:

幂的大小比较