6

正規化された2Dポイントの投影を計算していましたが、誤って、正規化せずにポイントを投影する場合よりも正確であることに気付きました。私のコードはC++であり、FPU(浮動小数点ユニット)がないAndroidモバイル用にNDKでコンパイルします。

値を0から1の間に正規化するときに、C ++を使用した計算で精度が得られるのはなぜですか?

C ++では、0から1の間の変数を操作する場合に算術の精度が得られるというのは一般的に正しいですか、それともARMデバイス用にコンパイルする場合に関連していますか?

4

2 に答える 2

9

あなたは精度について誤解しています。精度は基本的に、数値の仮数を表すために使用できるビット数です。

スケールを 0 から 1 の間に保つと、小数点以下の桁数が増えたように見えるかもしれませんが、それは精度ではなく、スケールや符号に基づいてまったく変化しません。

たとえば、数値が 0.5 であろうと 1e38 であろうと、単精度の精度は 23 ビットです。倍精度の精度は 52 ビットです。

IEEE754 ビットレベル表現の詳細については、この回答を参照してください。

于 2012-05-28T10:26:37.493 に答える
3

行列ベースの計算を行う場合、行列の条件数を計算したい場合があります。基本的に、条件数は、入力の数値誤差のサイズの関数として、回答の数値誤差のサイズを測定します。条件数が小さい問題は条件が良いといい、条件数が大きい問題は条件が悪いといいます。

問題によっては、データを前処理して (特定の変数を測定する単位を再スケーリングするなど)、条件数がより有利になるようにすることができます。たとえば、一部の列がドル セント単位で測定され、他の列が数十億ドル単位で測定される財務スプレッドシートは、悪条件です。

完全な説明については、ウィキペディアを参照してください。

于 2012-05-28T10:40:05.433 に答える