問題タブ [single-precision]
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.
c - int64_t = int64_t * float の精度を維持するには?
精度が約int64_t
の範囲内の係数で を補正したいと思います。単純な実装は次のようになります。[0.01..1.2]
0.01
残念ながら、 にキャストfactor
するint32
か、 にキャストすると、精度が失わy
れfloat
ます。
ただし、y
最大値が 未満1<<56
であることを確認できる場合は、次のトリックを使用できます。
入力値が より大きい場合、この問題をどのように解決できます1<<56
か?
プロットツイスト:
int64_t
エミュレートされた型であり、倍精度をサポートしていない32 ビット アーキテクチャで実行しています。アーキテクチャは、Analog Devices の SHARC です。
macos - fftw 倍精度から単精度へ
私のシステムにはすでに fftw-2.1.5 があります。倍精度から単精度に変更するにはどうすればよいですか? また、再インストールする必要がありますか? どんな助けでも大歓迎です。
floating-point - 電卓で 0.1 と 0.6 を足したとき、コンピュータはどのように 0.7 の結果を示しますか?
1) 私が知っているように、コンピューターは10 進数を2進数に変換して処理します。たとえば、コンピューターの電卓で「12」や「37」などの10 進数を足す場合。それが正しいか?
2) 最初の質問が正しい場合、以下のバイナリ式は CPU によって単精度でどのように解釈されますか? (結果はどのように表示されるのか? コンピューターは、浮動小数点数に変換されたこの式を 10 進数に変換する方法と、浮動小数点数に変換されたこの式を10 進数に戻すにはどうすればよいでしょうか?)
0 ll 01111110 ll 01100110011001100110100
つまり、次の式で結果が単精度で 0.70000005 であることをどのように知ったかを意味します:浮動小数点演算
3) 私が知っているように、コンピューターの電卓で 0.1 と 0.6 を10 進数で加算すると、コンピューターは私が共有したビデオと同じトランザクションを実行します。ただし、電卓は .0000005バイナリ セクションを非表示にし (ビデオの結果のように)、結果として10 進数の「0.7」を表示しますが、そのセクションを非表示または削除する方法は? 四捨五入して 0.71 のような数値が表示されなかったのはなぜですか。
0 ll 01111110 ll 01100110011001100110100浮動小数点数?
cuda - double で単精度フロップを使用する CUDA C
問題
CUDA C でのプロジェクト中に、単精度および倍精度の浮動小数点演算に関して予期しない動作に遭遇しました。このプロジェクトでは、最初にカーネルで配列に数値を入力し、別のカーネルでこれらの数値を計算します。すべての変数と配列は倍精度であるため、単精度の浮動小数点演算が発生するとは考えていません。しかし、NVPROF を使用してプログラムの実行可能ファイルを分析すると、単精度演算が実行されていることがわかります。これはどのように可能ですか?
最小限、完全、かつ検証可能な例
これは、私のアーキテクチャでこの動作を示す最小のプログラムです: (アサートとエラーのキャッチは省略されています)。Nvidia Tesla k40 グラフィックス カードを使用しています。
NVPROF の出力 (読みやすくするために編集されています。完全な出力が必要な場合は、コメントで質問してください):
これまでに見つけたもの
16行目の部門を削除すると、次のことがわかりました。
出力は期待どおりです。ゼロの単精度演算と正確に 100 の倍精度演算が実行されます。除算によってプログラムが単精度フロップと 10 倍の倍精度浮動小数点演算を使用する理由を知っている人はいますか? 組み込み関数 (__ddiv_rn) も使用してみましたが、問題は解決しませんでした。
よろしくお願いします!
編集 - 実用的なソリューション
単精度を使用する理由はまだわかりませんが、@EOF のおかげで、この問題の「解決策」を見つけました。乗算による除算を rho の逆数に置き換えると、次のようになります。
floating-point - 浮動小数点数が大きすぎるかどうかを検出 (オーバーフロー)
私は MIPS から始めて、与えられた三角形の斜辺を見つけなければならないという宿題を割り当てられました (それらはすべて単精度浮動小数点数です)。ただし、すべてのステップで、「無限」のIEEE754表現と数値を比較して、オーバーフローをチェックする必要がありますが、その方法がわかりません。助けていただければ幸いです。
編集:これまでのところ、入力用のコードのみです。