2017-04-25 16 views
1

私が作成したパワー関数のこのコードは、2つのループ(正の場合と負の指数の場合)を組み合わせる方法があると言われています。条件演算子より良い方法でパワー関数を書く必要がある

double myPow(double base, int exponent) { 
    double result = 1; 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    for (int i = 0; i > exponent; --i) { 
     result /= base; 
    } 
    return result; 
} 

どこから始めたらよいですか?

+6

これは、に行くべき[**コードレビュー**](HTTPS ://codereview.stackexchange.com/) –

+4

コードレビューでなければならないが、何らかの理由でこの愚かなダイアログにはまだそれがないので、この質問を議論の対象外としている。 –

+1

ねえ、馬鹿じゃないよ。 –

答えて

1

これはいかがですか?

double myPow(double base, int exponent) { 
    double result = 1; 
    if (exponent < 0) { 
     exponent = -exponent; 
     base = 1/base; 
    } 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    return result; 
} 
+0

これは最適に解決するのが難しい問題です。 Knuth第2巻4.6.4「力の評価」を参照のこと。アルゴリズムAは良いスタートになるでしょう。 –

+0

いいえ、(((((x^2)^ 2)^ 2)^ 2)^ 2)^ 2)^ 2)^ 2)を観測してx^8平方根の操作しか必要ありません。 –

0

あなたはループに、指数の絶対値を取得し、条件演算子を使用してループ内であなたの操作を行うことができます。

double result = 1; 
int absExp = std::abs(exponent); 
for (int i = 0; i < absExp; i++) { 
    exponent < 0 ? // division : // multiplication 
} 
+0

@Quentin Whoops。 –

+0

ありがとう、私はこのような何かに取り組もうとしていました。 – rchkrvr2

関連する問題