問題タブ [long-double]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1236 参照

c - C で非常に小さな数の方程式を実装する - 黒体を生成するプランクの法則

頭を悩ませた結果、ロングダブルで非常に小さな数字を扱うことに問題があると思います。

プランクの法則の方程式を実装して、特定の波長範囲と特定の温度の間で 1 nm 間隔で正規化された黒体曲線を生成しようとしています。最終的には、これは入力を受け取る関数になります。今のところは変数が固定された main() で、printf() によって出力されます。

私はmatlabpythonの例を見て、それらは私と同じ方程式を同様のループでまったく問題なく実装しています。

これは方程式です:

プランクスの法則

私のコードは、正しくない黒体曲線を生成します: 黒体コードの誤った出力

コードの主要部分を個別にテストしました。Excelでブロックに分割して方程式をテストしようとした後、結果が非​​常に小さいことに気付きました。大きな数の実装が問題を引き起こしているのではないでしょうか? 方程式を実装するために C を使用することについての洞察を持っている人はいますか? これは私にとって新しい領域であり、通常のコードよりも数学の実装とデバッグがはるかに難しいことがわかりました。

/*********************更新 2017 年 3 月 24 日金曜日 23:42******************** *****/

これまでの提案に感謝します。特に数値が C ( IEEE 754 ) に格納される方法を理解するための多くの有用なポインターですが、有効数字にのみ適用されるため、ここでは問題ではないと思います。私はほとんどの提案を実装しましたが、まだ問題は解決していません。コメントのアレクサンダーはおそらく正しいと思います.matlabやpythonの例のように方程式を機能させるには、単位と演算の順序を変更する必要があると思いますが、私の数学の知識はこれを行うのに十分ではありません. 方程式をチャンクに分割して、それが何をしているかを詳しく見てみました。

xcode での実行時の方程式変数の値:

xcode での実行時の変数値