フローリングの無限大がエラーをスローしないのはなぜですか?

gxtaillon

同等のfloor $ 1/0死刑が執行されていることに気づきました。

λ> 1/0
Infinity

とき、これは、これまで私が理解して正常な動作ですが、Infinityあるfloor「DまたはceilingD」

λ> floor $ 1/0   
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

失敗する代わりに、この非常に大きな数が生成されます。どうして?

おそらくもっと重要なのは、別の関数を適用する前に、フィルターを使用せずにこれを障害のない結果と区別するにはどうすればよいですか?

user2407038

最初の質問はおそらくそれほど重要ではないので、最初に2番目の質問に答えようとします。

数を取得したら、それがから来たものfloor xあることがわかっている場合、それxがの有効な表現であった2^1024それとも無限大であった知ることはできませんdoubleの範囲外のものは無効であり、無限大、負の無限大、NaNなどから生成されたと考えられます。あなたの値が関数の多くの1 /使用して有効であるかどうかを確認するために非常に簡単になりますRealFloatように、isNaNisInfinite、など

のようなものを使用することもできますdata Number a = N a | PosInf | NegInf次に、次のように記述します。

instance RealFrac a => RealFrac (Number a) where 
  ...
  floor (N n) = floor n
  floor PosInf = error "Floor of positive infinity"
  floor NegInf = error "Floor of negative infinity"
  ..

どちらのアプローチが最適かは、主にユースケースに基づいています。

たぶんそれはfloor (1/0)エラーであることが正しいでしょうしかし、値はとにかくゴミです。ゴミやエラーに対処する方が良いですか?

しかし、なぜ2^1024ですか?私は次のソースを調べましたGHC.Float

properFraction (F# x#)
  = case decodeFloat_Int# x# of
    (# m#, n# #) ->
        let m = I# m#
            n = I# n#
        in
        if n >= 0
        then (fromIntegral m * (2 ^ n), 0.0)
        else let i = if m >= 0 then                m `shiftR` negate n
                               else negate (negate m `shiftR` negate n)
                 f = m - (i `shiftL` negate n)
             in (fromIntegral i, encodeFloat (fromIntegral f) n)

floor x     = case properFraction x of
                (n,r) -> if r < 0.0 then n - 1 else n

decodeFloat_Int#仮数と指数返すことに注意してくださいウィキペディアによると

正と負の無限大は次のように表されます。正の無限大の場合はsign = 0、負の無限大の場合は1です。バイアスされた指数=すべての1ビット。分数=すべて0ビット。

の場合Float、これは2 ^ 23の底を意味します。これは、底に23ビットがあり、指数が105であるためです(なぜ105なのか、実際にはわかりません。255〜127 = 128になるはずですが、そうです。実際には128〜23)。値がfloorありますfromIntegral m * (2 ^ n)base*(2^exponent) == 2^23 * 2^105 == 2^128doubleの場合、この値は1024です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

エラーをログに記録していないのにModelStateが無効なのはなぜですか?

コントロールドラッグ時にエクスプローラーがファイルをコピーしないのはなぜですか?

リンカが複数の関数宣言エラーをスローしないのはなぜですか?

このAdaプログラムが制約エラーをスローしないのはなぜですか?

プログラムが無限ループを実行しているのはなぜですか?Python

関数本体のコロンがJavaScriptでエラーをスローしないのはなぜですか?

<!-が構文エラーをスローしないのはなぜですか?

スプリングブートでエラーファクトリメソッド 'halLinkDisocoverer'が例外をスローしたのはなぜですか?

スプリングブートでこのエラーが発生してelasticsearchノードをロードできなかったのはなぜですか?

私のプログラムが無限のGETリクエストを行うのはなぜですか?

WindowsエクスプローラーがVisualStudio 2010b2ソリューションファイルを認識しないのはなぜですか?

C#コンパイラがエラーをスローしないのはなぜですか?

FacebookのログインフラグメントがAndroidで常に無効なキーハッシュを表示しているのはなぜですか?

Erlangへのログイン:エラーが発生したときにメールを送信するライブラリがないのはなぜですか?

Xcodeがコンパイルエラーをスローしないのはなぜですか?

MicrosoftGraphフィルターがグラフエクスプローラーで機能するのにAPIでは機能しないのはなぜですか

axiosを使用した単純なgetリクエストが、コントローラーが返すものを返さないのはなぜですか?

Android NDKでフロートがFLT_MAXよりも大きいのはなぜ無限大ではないのですか?

このkotlinコードが範囲外のエラーをスローしないのはなぜですか?

fork()呼び出しを使用したcプログラムが無限ループを作成しないのはなぜですか?

大きな配列の計算で、システムが単にハングし、メモリエラーが発生しないのはなぜですか?

次のコードがエラーをスローしないのはなぜですか?

値がないのに無限の値を示すエラーメッセージがプロットされるのはなぜですか?

undefinedがないのはなぜですか?.fun()はエラーをスローしますか?

returnステートメントがプログラムを停止しないのはなぜですか?

「<」がボタン内でエラーをスローするのに、「>」はスローしないのはなぜですか?

プログラムが正しいのに「無効なユーザー名またはパスワード」を出力するのはなぜですか

「ファイルエクスプローラーを管理者権限で実行しているときに(アプリ名)を開くことができません」というエラーが発生するのはなぜですか?

UDFがストリーミングクエリでNotSerializableExceptionをスローするのはなぜですか?

TOP 一覧

  1. 1

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  2. 2

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  3. 3

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    Ansibleで複数行のシェルスクリプトを実行する方法

  7. 7

    Python / SciPyのピーク検出アルゴリズム

  8. 8

    画像変更コードを実行してもボタンの画像が変更されない

  9. 9

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  10. 10

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  11. 11

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  12. 12

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  13. 13

    二次導関数を数値計算するときの大きな誤差

  14. 14

    値間の一致を見つける最も簡単な方法は何ですか

  15. 15

    androidsoongビルドシステムによるネイティブコードカバレッジ

  16. 16

    Reactでclsxを使用する方法

  17. 17

    How to access json value by key value in freemarker?

  18. 18

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  19. 19

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  20. 20

    Using Angular's UI-router, how can we make sure the new version of the html partial views are used, rather than the cached version?

  21. 21

    symfonyエラーサーバーが404NotFoundを返しました

ホットタグ

アーカイブ