簡體   English   中英

二元運算符'^'的壞操作數類型

[英]Bad operand type for binary operator '^'

嘗試創建一個遞歸方法,將一個double值提升為java課程的int權限。 指令說“但是,編寫代碼,以便當n為偶數時,方法將返回(x ^(n / 2))^ 2。”

這是我到目前為止:

     public static double powerFaster(double x, int n) {
         if (n == 0) {
            return 1;
         } 
         else if ((n % 2) == 0) {
           return ((x ^ (n / 2.0) ^ 2.0));  //Error occurs here.
         } else {
           return x * powerFaster(x, (n - 1));
         }
     }

^是XOR運算符,而不是冪。 使用Math.pow()獲取電源。

也就是說,我認為你錯過了練習的重點。

你應該return powerFaster(x, n/2) * powerFaster(x, n/2); n是偶數時(實際上進行一次遞歸調用,將其結果存儲在變量中並將其自身相乘)。

public static double powerFaster(double x, int n) {
     if (n == 0) {
        return 1;
     } 
     else if ((n % 2) == 0) {
       double pow = powerFaster(x, n/2);
       return pow * pow;
     } else {
       return x * powerFaster(x, (n - 1));
     }
 }

如果你這樣做是為了提高速度,你想避免使用Math.pow因為這是你要替換的功能。

要得到一個值的平方,你可以做d * d

public static void main(String[] args) {
    System.out.println(powerOf(2, 9));
}

public static double powerOf(double d, int n) {
    if (n < 0) return 1 / powerOf(d, -n);

    double ret = 1;
    if (n > 1)
        ret = powerOf(d * d, n / 2);
    if (n % 2 != 0)
        ret *= d;
    return ret;
}

版畫

512.0

^是按位異或,與整數一起使用

int a = 6; //00000110
int b = 5; //00000101
int c = a ^ b; //gives you 3 = 00000011, not 6^5

操作處於二進制級別:

00000110 //a
00000101 //b
--------- XOR
00000011

要執行電源,請使用Math.pow()

Math.pow(2.0, 1.0) //gives you 2.0

在Java中,您應該使用java.lang.Math.pow(double x,double n)將值x提升為n的冪

^XOR運算符 - 有關詳細信息,請參閱此SO問題

在旁注不要忘記Math.pow是一個非常繁重的操作,如果你只使用它作為方形或立方體,你最好用*運算符或甚至for循環

Mult with *運算符耗時4ms

Mult with math pow需要717ms

帶有for循環的Mult需要4ms

只有在測試中使用立方體操作,才能完成一百萬次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM