すべてゼロはゼロ:ほとんどすべてのプログラミング言語がこれを行います

私は先日、あらゆる種類の有用な数学関数を計算するための小さくても非常に便利な自転車を自分で作ることにしました。 私が異なる言語で書くことは注目に値しますが、今回はC ++を選択しました。 私はそれを飲んでいます。つまり、この素晴らしい三輪車を意味し、同時に新しく作成した機能を単体テストしています...そしてここで、こんにちは-テストの1つは私が期待していた結果をまったく与えませんでした。 準備はいい?



ゼロのゼロ乗は1に等しい!!! (意味のある悲劇的な表情)



まあ、それはすべて違うと思う。 少なくとも例外をキャッチすると単純に仮定して、pow()関数を個別にチェックすることにしました。



#include <cmath> #include <iostream> #include <stdexcept> int main(void) { try { std::cout << "zeroth power of zero: " << std::pow(0, 0) << std::endl; } catch(std::exception &ex) { std::cerr << ex.what() << std::endl; } return 0; }
      
      





期待が確認されました-例外はなく(すべてドキュメントに完全に準拠しています)、コンソールの結果は頑固なユニットです。



科学の瞬間のために、私は少し余談します。 非常に短く単純な場合:



累乗は、指数aで示される数だけ、数値aがそれ自体で乗算される2項演算です。 a bと書かれておりaのb乗」と読みます。 例:



3 5 = 3 * 3 * 3 * 3 * 3または5 2 = 5 * 5



しかし、指数がゼロの場合はどうでしょうか? 等号の後のレコードはどのように見えるはずですか?..解は非常に単純であることが判明しました-度の特性により、数a ba b = a c * a (bc)として表すことができます。 明確にするために:



4 7 =(4 * 4 * 4)*(4 * 4 * 4 * 4)= 4 3 * 4 4



ゼロ度の数値は、 a 0 = a b * a -bとして表すことができます。 しかし、理解されているようなこの負の程度は何ですか? 答えは非常に簡単です。乗算の反対は除算です。 したがって、負の次数の数値は、単位を正の次数の数値で除算したものです-a -b = 1 / a b



上記に基づいて、かなり単純な結論を導き出すことができます。



a 0 = a b * a -b = a b / a b = 1



しかし、a = 0の場合はどうでしょうか? かなり不快な状況が発生します-ゼロをゼロで除算することは、超大質量ブラックホールの痛みの下で除算することを厳密に禁じています。



ゼロをゼロ度まで計算する他の方法があり、あるものは統一性を与え、あるものはゼロを与え、他のものは再びゼロで除算します。 そのような状況は、何かを計算できない場合、数学の不確実性と呼ばれます(明確に決定することは不可能です)。



さて、短い教育プログラムは終了しました。



プログラミングに戻りましょう...他の言語での状況を確認することにし、Pythonを開始しました。



 import math try: print("0**0:", 0**0) print("pow(0, 0)", math.pow(0, 0)) except: print("Exception")
      
      





そして、このヘビはユニットを与え、エラーはありません。 これは何ですか?! 私はあなたのインターネットに登って、このリストに出会いました。 それは、みんなが私たちを夢中にさせたからです-ほぼすべての言語で、たとえばゼロで除算するときのように、予想されるエラーの代わりにユニットが発行されます。



そして、これは同じ会社のYandexの標準的なシステムのもののブラウザ計算機に見られます。 そして、これは私の謙虚な意見では、重大な間違いの地獄です。 したがって、コードを見て驚かないでください。



 T correct_pow(T a, T b) { if(a == 0 && b == 0) { throw zero_power_zero(); } } return(pow(a, b));
      
      






All Articles