Java编码中,平方的计算需要注意的问题!

2020/02/01

Java编码中,平方的计算需要注意的问题!

不能使用^符号,要用Math.pow()函数做平方计算

在计算一个数平方,发现和预期的结果不一致:

如下:

计算  n2    当n=1时,代码 n^2=3 !!!

查找到的原因

则本次编码中用到的 1^2 的实际运算过程为:

     0001
⊕   0010
      0011

 

     

 

根据异或的计算规则:位 相同为0,不同为1,得到2进制的0011,即10进制的3。

得证!

结论

    要想使用数学中的平方计算,需要用到java.lang.Math包中的pow函数

    其函数源码:

1 public static double pow(double a, double b) {
2         return StrictMath.pow(a, b); // default impl. delegates to StrictMath
3     }

    其函数源码注释

  1 * Returns the value of the first argument raised to the power of the
  2      * second argument. Special cases:
  3      *
  4      * <ul><li>If the second argument is positive or negative zero, then the
  5      * result is 1.0.
  6      * <li>If the second argument is 1.0, then the result is the same as the
  7      * first argument.
  8      * <li>If the second argument is NaN, then the result is NaN.
  9      * <li>If the first argument is NaN and the second argument is nonzero,
 10      * then the result is NaN.
 11      *
 12      * <li>If
 13      * <ul>
 14      * <li>the absolute value of the first argument is greater than 1
 15      * and the second argument is positive infinity, or
 16      * <li>the absolute value of the first argument is less than 1 and
 17      * the second argument is negative infinity,
 18      * </ul>
 19      * then the result is positive infinity.
 20      *
 21      * <li>If
 22      * <ul>
 23      * <li>the absolute value of the first argument is greater than 1 and
 24      * the second argument is negative infinity, or
 25      * <li>the absolute value of the
 26      * first argument is less than 1 and the second argument is positive
 27      * infinity,
 28      * </ul>
 29      * then the result is positive zero.
 30      *
 31      * <li>If the absolute value of the first argument equals 1 and the
 32      * second argument is infinite, then the result is NaN.
 33      *
 34      * <li>If
 35      * <ul>
 36      * <li>the first argument is positive zero and the second argument
 37      * is greater than zero, or
 38      * <li>the first argument is positive infinity and the second
 39      * argument is less than zero,
 40      * </ul>
 41      * then the result is positive zero.
 42      *
 43      * <li>If
 44      * <ul>
 45      * <li>the first argument is positive zero and the second argument
 46      * is less than zero, or
 47      * <li>the first argument is positive infinity and the second
 48      * argument is greater than zero,
 49      * </ul>
 50      * then the result is positive infinity.
 51      *
 52      * <li>If
 53      * <ul>
 54      * <li>the first argument is negative zero and the second argument
 55      * is greater than zero but not a finite odd integer, or
 56      * <li>the first argument is negative infinity and the second
 57      * argument is less than zero but not a finite odd integer,
 58      * </ul>
 59      * then the result is positive zero.
 60      *
 61      * <li>If
 62      * <ul>
 63      * <li>the first argument is negative zero and the second argument
 64      * is a positive finite odd integer, or
 65      * <li>the first argument is negative infinity and the second
 66      * argument is a negative finite odd integer,
 67      * </ul>
 68      * then the result is negative zero.
 69      *
 70      * <li>If
 71      * <ul>
 72      * <li>the first argument is negative zero and the second argument
 73      * is less than zero but not a finite odd integer, or
 74      * <li>the first argument is negative infinity and the second
 75      * argument is greater than zero but not a finite odd integer,
 76      * </ul>
 77      * then the result is positive infinity.
 78      *
 79      * <li>If
 80      * <ul>
 81      * <li>the first argument is negative zero and the second argument
 82      * is a negative finite odd integer, or
 83      * <li>the first argument is negative infinity and the second
 84      * argument is a positive finite odd integer,
 85      * </ul>
 86      * then the result is negative infinity.
 87      *
 88      * <li>If the first argument is finite and less than zero
 89      * <ul>
 90      * <li> if the second argument is a finite even integer, the
 91      * result is equal to the result of raising the absolute value of
 92      * the first argument to the power of the second argument
 93      *
 94      * <li>if the second argument is a finite odd integer, the result
 95      * is equal to the negative of the result of raising the absolute
 96      * value of the first argument to the power of the second
 97      * argument
 98      *
 99      * <li>if the second argument is finite and not an integer, then
100      * the result is NaN.
101      * </ul>
102      *
103      * <li>If both arguments are integers, then the result is exactly equal
104      * to the mathematical result of raising the first argument to the power
105      * of the second argument if that result can in fact be represented
106      * exactly as a {@code double} value.</ul>
107      *
108      * <p>(In the foregoing descriptions, a floating-point value is
109      * considered to be an integer if and only if it is finite and a
110      * fixed point of the method {@link #ceil ceil} or,
111      * equivalently, a fixed point of the method {@link #floor
112      * floor}. A value is a fixed point of a one-argument
113      * method if and only if the result of applying the method to the
114      * value is equal to the value.)
115      *
116      * <p>The computed result must be within 1 ulp of the exact result.
117      * Results must be semi-monotonic.
118      *
119      * @param   a   the base.
120      * @param   b   the exponent.
121      * @return  the value {@code a}<sup>{@code b}</sup>.
122      */

最终结果:

 

 

 


 

posted @ 2020-02-01 19:43  厸清扬  阅读(1223)  评论(0编辑  收藏  举报