質問

私は数学者ではありませんが、無限大で除算するのは悪い数学であるか、少なくとも非実用的だと思います。

Firefoxでは問題なく動作していましたが、IEではエラーが発生していたjavascriptのデバッグに30分かかりました。特定のシナリオでは、IEを無限で除算するように求めていたため、最終的にそれが実現しました。

それで、私はそれを修正しましたが、Firefoxがそれで問題なかった理由について興味があります。確かに、これはプログラミングよりも数学の問題かもしれません。 ;)

役に立ちましたか?

解決

これはIEのバグだと思います。 IEEE数学の規則に従って、n / Inf = 0(n!= 0の場合)。したがって、IEがこれをくぐり抜けると、IEの問題になります。一方、通常の数学演算でInfを使用することには問題があり、コードがそもそもInfに依存していなかった方が良いでしょう。

なぜ危険なのですか?さて、IEEE 754によると、まず最初に:

1/0 = Inf
1/-0 = -Inf

しかし、0 = -0であることがわかっているため、

Inf = -Inf

これは明らかに望ましくありません。 IEEEは、とにかくInfを普通の数字にするつもりはありませんでした。 InfとNaNは、固有の限られた精度とオーバーフローの問題を伴うコンピューターで浮動小数点演算を行うために存在します。別の実数)。有限精度の浮動小数点数でこれを行うと、2つの数値を追加するとオーバーフローが発生する場合があります。これをエラー状態として扱う必要を避けるために、IEEEはInfとNaNの2つの追加シンボルと、それらの動作に関する一連のルールを導入しました。現在、数学演算の結果は常に数値、またはInf、またはNaNであり、結果が意味をなすかどうかはユーザーに任されています。

他のヒント

無限大による除算は問題ありません-ゼロです。

無限を無限で除算しない限り、(少なくとも一般的には)未定義です

数を無限で除算することは、数学的な観点から完全に合理的です。これは、実際にゼロに達することなく、ゼロに限りなく近い数値です。

無限大は離散的に表現できる値ではないため、ソフトウェアの観点からは、これははるかに困難です。私の推測では、あなたの行動の違いは設計上の決定に基づいているでしょう。

Firefoxでは、おそらく実用的な目的のために、この結果は必要なものに対して機能するため、値0を返すことを選択しました。

一方、IEでは、開発者は、個別の答えを出すことができないとわかっている計算を実行できないように意識的に決定したようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top