2 + 2/- 7 * - 7 * 8 - 5 + 7 * -3
異なっているPythonのは、このように、この式を計算なぜRubyとPythonの数学の計算が
2+2/-7*-7*8-5+7*-3 == 32
# => true
しかし正解は-8
です。
どこが間違っていますか? Rubyの結果とPythonの結果が異なるのはなぜですか?パイソン
>>> 2+2/-7*-7*8-5+7*-3 == -8.0
True
で
2 + 2/- 7 * - 7 * 8 - 5 + 7 * -3
異なっているPythonのは、このように、この式を計算なぜRubyとPythonの数学の計算が
2+2/-7*-7*8-5+7*-3 == 32
# => true
しかし正解は-8
です。
どこが間違っていますか? Rubyの結果とPythonの結果が異なるのはなぜですか?パイソン
>>> 2+2/-7*-7*8-5+7*-3 == -8.0
True
で
/
点分割フローティングないからです。
しかし、Ruby /
は整数除算を意味します。
PythonをRubyのように動作させるには、//
を使用する必要があります。
それを破壊:ルビー(と古いPythonの、すなわち、Pythonの2)で基本的にはRubyで
2+2/-7*-7*8-5+7*-3
= 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3)
= 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3)
= 2 + (-0.2857142857142857) * (-7) * 8 - 5 + 7 * (-3)
= 2 + 2.0 * 8 - 5 + 7 * (-3)
= 2 + 16.0 - 5 + 7 * (-3)
= 2 + 16.0 - 5 + 7 * (-3)
= 2 + 16.0 - 5 + (-21)
= -8.0
、
2+2/-7*-7*8-5+7*-3
= 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3)
= 2 + (-1) * (-7) * 8 - 5 + 7 * (-3)
= 2 + 7 * 8 - 5 + 7 * (-3)
= 2 + 56 - 5 + 7 * (-3)
= 58 - 5 + (7 * -3)
= 53 + (7 * -3)
= 53 + (-21)
= 32
:Pythonで
を
2/(-7) == -1
Pythonでは(つまり、 以来の周りされているのPython 3は、):
2/(-7) == -0.2857142857142857
2 // (-7) == -1
としては指摘し、正しくので、コメントの中で、Pythonの古いバージョンがある人々は今日でも使用することを(Pythonの2と呼ばれます! )/
はRubyのように動作します。
多くの人々がPython 2が死ぬのを待っていますが、それは掛かっています(それでもうまくいく)ので、Python 2とPython 3を修飾するのが最善です。 OPは完全な世界では、我々がすべて言うことができるだろう、Python 3に適用するために、非修飾語 "Python"を使用しています。結局のところ、誰もPython "1"を使用していますか? :-)
/の動作がPython 2からPython 3に変更されました。その答えが普遍的に正しいわけではありません。 –
あなたは正しいです。私がPython 2が存在しないふりをしようとする限り、それは実際に行い、真実と現実は私の夢よりも優先すべきです。 :) –
"ほとんどの人がPython 2が死ぬのを待っています"。この主張の最近の情報源はありますか?私が最後に見たときには、Python3よりもPython2のユーザーがまだ多かったです。 –
この例は単純である:Rubyで
(とPython 2.xの)、1/2 == 0
。 Python 3.xでは、それは0.5
です。
RubyとPython 2では、2つの整数間の/
が整数除算を実行します(真の結果をフロアします)。
Rubyには-8
があります。私はあなたの最初の質問にお答えします
2+2.0/-7*-7*8-5+7*-3
私はそれを切り捨てるのではなく、Pythonで知っています。私はRubyに慣れていませんが、Rubyも同様にフロアリングしているようです。それは、私が気付いていないことは私の実験を混乱させることです。 (私は関連するRubyのドキュメントを見つけることができませんでした) – user2357112
あなたはそうです、ありがとう!今編集中。 – smarx
@ user2357112:そうです、対応する[doc](https://ruby-doc.org/core-2.4.0/Integer.html#method-i-2F)は役に立たないです。 Rubyの整数部はフローリングを使用します。 –
:浮動小数点値という作り、2.0
に注意してください。
あなたのPythonとRubyのレポートが正しいとすれば、明らかに、「どこが間違っていますか?」という質問に対する答えは1つだけです。つまり、
しかし、正解は-8です。
自分で確認してきたように、あなたのPython環境の正しい答えは-8.0
あり、そして、あなたのRubyの環境のために、それは32
です。
Python 2.xでは32、Python 3.xでは-8が得られます。違いは '/'が整数除算を行うかどうかです。 (Python 3.xがこれを変更しました) – smarx