k496032
@k496032 (Y I)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

削除

pythonのべき乗の計算について

初歩的な質問をさせて下さい。
pythonで乗算とべき乗さんを組み合わせた時に下記のように結果が変わってしまいます。
理由がわからず困っているので原因を教えていただけませんでしょうか。

pythonでの計算優先順位
https://qiita.com/tTAGUCHI/items/1dee92cd058f975ffce3
pythonでべき乗と乗除算を組み合わせた時の答えが変わってしまいます。
すべて同じ答えになると思ったのですが、そうではないようです。

A = 1700
B = 120
C = 0.025
A_sq = A * A ; B_sq = B * B ; C_sq = C * C
ABC_sq = A_sq * C_sq / B_sq
print(ABC_sq)

上のような計算をしようとしています。
結果は以下のようになります。

0.12543

計算の仕方によって2種類の答えが出てしまいます。
ほしい答えが出るパターン

ABC = A/B*C
#OKな例
ABC_sq = ABC ** 2
print(ABC_sq)
#OKな例
ABC_sq = A **2 * C**2 / (B**2)
print(ABC_sq)

違う答えが出るパターン

AB = A/B
#NGな例
ABC_sq = AB* C** 2
print(ABC_sq)
#NGな例
ABC_sq = AB* (C** 2)
print(ABC_sq)
#NGな例
ABC_sq = AB* pow(C, 2)
print(ABC_sq)
#NGな例
ABC_sq = C**2 * AB
print(ABC_sq)

なぜこのような結果になるか教えていただけると助かります。
よろしくお願いします。

1

5Answer

結果が異なるのは、式が等価で無いならです。
NGの例は、明らかにABが二乗されていません。

2Like

Comments

  1. いきなり「削除」とは何事でしょうか?
    質問自体を取り下げたかったということでしょうか?
    内容を消したところで、「編集履歴」には残ります。

pythonのべき乗の計算について

初歩的な質問をさせて下さい。
pythonで乗算とべき乗さんを組み合わせた時に下記のように結果が変わってしまいます。
理由がわからず困っているので原因を教えていただけませんでしょうか。

pythonでの計算優先順位
https://qiita.com/tTAGUCHI/items/1dee92cd058f975ffce3
pythonでべき乗と乗除算を組み合わせた時の答えが変わってしまいます。
すべて同じ答えになると思ったのですが、そうではないようです。

A = 1700
B = 120
C = 0.025
A_sq = A * A ; B_sq = B * B ; C_sq = C * C
ABC_sq = A_sq * C_sq / B_sq
print(ABC_sq)

上のような計算をしようとしています。
結果は以下のようになります。

0.12543

計算の仕方によって2種類の答えが出てしまいます。
ほしい答えが出るパターン

ABC = A/B*C
#OKな例
ABC_sq = ABC ** 2
print(ABC_sq)
#OKな例
ABC_sq = A **2 * C**2 / (B**2)
print(ABC_sq)

違う答えが出るパターン

AB = A/B
#NGな例
ABC_sq = AB* C** 2
print(ABC_sq)
#NGな例
ABC_sq = AB* (C** 2)
print(ABC_sq)
#NGな例
ABC_sq = AB* pow(C, 2)
print(ABC_sq)
#NGな例
ABC_sq = C**2 * AB
print(ABC_sq)

なぜこのような結果になるか教えていただけると助かります。
よろしくお願いします。

1Like

質問内容の中に含まれている計算の優先順位の記事の通りに、べき乗の計算が先に行われているためです。

OKな例ではABCの計算を先にしています。
その後、計算されたABCの値を2乗しています。

NGな例では、ABは先に計算して、その値 * C ** 2 をしています。
計算の優先順位の通り先にべき乗(C ** 2)が行われ、その後にABとの乗算が行われます。

それぞれの例で計算順番が異なるので、結果が異なるのは必然です。

0Like

なぜこのような結果になるか

ABC_sq = ABC ** 2 と同じ結果になるためには、A/B*Cの結果を2乗しなければならないが、違う答のものは Cのみ2乗することになっているから。

ABC_sq = AB* C** 2

質問にあるリンク先にあるとおり、** の方が * より優先順位が高いため
正解にするには(AB * C) ** 2 とする必要がある。

ABC_sq = AB* (C** 2)

質問にあるリンク先にあるとおり、()内の方が優先順位が高いため。
正解にするには(AB * C) ** 2 とする必要がある。

ABC_sq = AB* pow(C, 2)

質問にあるリンク先にあるとおり、関数呼び出しの方が優先順位が高いため。
正解にするにはpow(AB * C, 2) とする必要がある。

ABC_sq = C**2 * AB

これが正解になると考える理由が不明。

0Like

@k496032
質問が解決してクローズとなっても、質問内容を削除するのはお控えください。

ガイドラインにもある通り、
Qiitaの質問は、質問者が自分の問題を解決するためだけでなく、ほかのユーザーが同じような問題に直面したときに参考にするためでもあります。

質問をもとの状態にしていただけますとありがたいです。

0Like

Your answer might help someone💌