タグ付けされた質問 「floating-point」

浮動小数点数は実数の近似値であり、整数より広い範囲を表すことができますが、同じ量のメモリを使用しますが、精度は低くなります。質問が小さな算術エラー(たとえば、0.2 + 0.1が0.300000001に等しいのはなぜですか)または10進数の変換エラーについての質問である場合は、投稿する前に以下のリンクの「情報」ページをお読みください。



1
doubleを32ビットintに丸める高速な方法の説明
Luaのソースコードを読んだとき、Luaはa macroを使用してa doubleを32ビットに丸めることに気付きましたint。を抽出するmacroと、次のようになります。 union i_cast {double d; int i[2]}; #define double2int(i, d, t) \ {volatile union i_cast u; u.d = (d) + 6755399441055744.0; \ (i) = (t)u.i[ENDIANLOC];} ここでENDIANLOCは、リトルエンディアン、ビッグエンディアンのエンディアンネスとして定義されています。Luaはエンディアンを慎重に処理します。またはのような整数型を表します。01tintunsigned int 私は少し調査しましたがmacro、同じ考えを使用するより簡単な形式があります。 #define double2int(i, d) \ {double t = ((d) + 6755399441055744.0); i = *((int *)(&t));} またはC ++スタイルで: inline int double2int(double d) …

11
単精度と倍精度の浮動小数点演算の違いは何ですか?
単精度浮動小数点演算と倍精度浮動小数点演算の違いは何ですか? 私は特に、ビデオゲームコンソールに関する実用的な用語に興味があります。たとえば、ニンテンドー64には64ビットプロセッサがありますか。PS3とXbox 360は、倍精度浮動小数点演算または単精度のみを引き出すことができますが、一般に、倍精度機能が利用されます(存在する場合)。


2
IEEE 754フロートが正確に表現できない最初の整数はどれですか?
わかりやすくするために、IEE 754 floatを実装する言語を使用していて、次のように宣言したとします。 float f0 = 0.f; float f1 = 1.f; ...そしてそれらをプリントアウトすると、0.0000と1.0000が正確に得られます。 しかし、IEEE 754は実際の線に沿ったすべての数値を表すことができません。ゼロに近い、「ギャップ」は小さいです。遠ざかるにつれて、ギャップは大きくなります。 だから、私の質問は、IEEE 754 floatの場合、正確に表現できない最初の(ゼロに最も近い)整数ですか?私は今のところ、32ビットの浮動小数点数にのみ関心がありますが、誰かが64ビットの浮動小数点数を教えてくれれば、その答えを聞きたいと思います。 私は、これが2計算のような単純なようであろうと思っbits_of_mantissaに 1を加算し、bits_of_mantissaが何ビット標準露出させます。私のマシン(MSVC ++、Win64)で32ビットの浮動小数点に対してこれを行いましたが、問題はないようです。

5
Python Pandas集計結果からの科学的表記のフォーマット/非表示
非常に大きな数の科学的表記を生成するパンダのgroupby操作からの出力の形式をどのように変更できますか? 私はpythonで文字列フォーマットを行う方法を知っていますが、ここでそれを適用することになると途方に暮れます。 df1.groupby('dept')['data1'].sum() dept value1 1.192433e+08 value2 1.293066e+08 value3 1.077142e+08 これは、文字列に変換する場合、科学表記を抑制しますが、今は文字列形式にして小数を追加する方法を考えているだけです。 sum_sales_dept.astype(str)

4
Python 3では4 * 0.1の浮動小数点値は見栄えが良いのに、3 * 0.1は見栄えが悪いのはなぜですか?
ほとんどの小数には正確な浮動小数点表現がないことがわかっています(浮動小数点演算は壊れていますか?)。 しかし、両方の値が実際に醜い10進数表現を持っている場合、なぜ4*0.1がとしてうまく表示されるのかわかりません0.4が、そうで3*0.1はありません。 >>> 3*0.1 0.30000000000000004 >>> 4*0.1 0.4 >>> from decimal import Decimal >>> Decimal(3*0.1) Decimal('0.3000000000000000444089209850062616169452667236328125') >>> Decimal(4*0.1) Decimal('0.40000000000000002220446049250313080847263336181640625')

6
Double.MIN_VALUEが負でないのはなぜですか
誰もがその理由についていくつかの光を当てることができますか Double.MIN_VALUE実際にダブルスが取ることができる最小値ではないを明らかにすることはできますか?これは正の値であり、Doubleはもちろん負の値でもかまいません。 なぜそれが便利な数字なのかは理解できますが、特にと比較すると、非常に直感的でない名前のようInteger.MIN_VALUEです。それDouble.SMALLEST_POSITIVEまたはMIN_INCREMENT類似のものを呼び出すと、より明確なセマンティクスが得られます。 また、ダブルスが取ることができる最小値は何ですか?ですよ-Double.MAX_VALUEね?ドキュメントは言っていないようです。

16
PHPでフロートを比較する
次のサンプルコードのように、PHPで2つの浮動小数点数を比較したいと思います。 $a = 0.17; $b = 1 - 0.83; //0.17 if($a == $b ){ echo 'a and b are same'; } else { echo 'a and b are not same'; } このコードでは、結果を返しelse条件の代わりにifもかかわらず、条件$aと$b同じです。PHPでフロートを処理/比較する特別な方法はありますか? はいの場合、この問題の解決を手伝ってください。 それとも私のサーバー設定に問題がありますか?

17
Bashで2つの浮動小数点数を比較する方法は?
私はbashスクリプト内で2つの浮動小数点数を比較しようと頑張っています。私は変数にする必要があります、例えば let num1=3.17648e-22 let num2=1.5 ここで、これら2つの数値を簡単に比較したいと思います。 st=`echo "$num1 < $num2" | bc` if [ $st -eq 1]; then echo -e "$num1 < $num2" else echo -e "$num1 >= $num2" fi 残念ながら、「e-フォーマット」の可能性があるnum1の正しい扱いに問題があります。:( 任意の助け、ヒントは大歓迎です!

9
Double.NaN == Double.NaNがfalseを返すのはなぜですか?
私はOCPJPの質問を調べていたところ、次の奇妙なコードが見つかりました。 public static void main(String a[]) { System.out.println(Double.NaN==Double.NaN); System.out.println(Double.NaN!=Double.NaN); } 私がコードを実行したとき、私は得ました: false true false互いに同じように見える2つのものを比較すると、出力はどうなりますか?どういうNaN意味ですか?
155 java  floating-point  nan  scjp  ocpjp 

10
C#での浮動小数点演算は一貫していますか?できますか?
いいえ、これは「なぜ(1 / 3.0)* 3!= 1なのか」という別の質問ではありません。 最近、浮動小数点についてよく読んでいます。具体的には、同じ計算が異なるアーキテクチャまたは最適化設定で異なる結果をもたらす方法です。 これは、リプレイを保存する、または(サーバークライアントではなく)ピアツーピアネットワーク化されたビデオゲームの問題であり、プログラムを実行するたびにすべてのクライアントがまったく同じ結果を生成することに依存します。浮動小数点計算は、異なるマシン(または同じマシンでも!)で劇的に異なるゲーム状態につながる可能性があります。 これは、主に一部のプロセッサ(つまりx86)が倍の拡張精度を使用するため、IEEE-754に「従う」プロセッサの間でも発生します。つまり、80ビットのレジスタを使用してすべての計算を行い、64ビットまたは32ビットに切り捨てて、計算に64ビットまたは32ビットを使用するマシンとは丸めの結果が異なります。 オンラインでこの問題のいくつかの解決策を見てきましたが、すべてC ++ではなくC ++向けです。 (Windows)、(Linux?)、または(BSD)をdouble使用して、倍精度拡張モードを無効にします(すべての計算でIEEE-754 64ビットを使用し_controlfp_sます)。_FPU_SETCWfpsetprec 常に同じコンパイラーを同じ最適化設定で実行し、すべてのユーザーが同じCPUアーキテクチャーを持っている必要があります(クロスプラットフォームの遊びはありません)。私の「コンパイラ」は実際にはJITであるため、プログラムを実行するたびに異なる最適化が行われる可能性があります、これは可能ではないと思います。 固定小数点演算を使用しfloat、double完全に回避します。decimalこの目的のためにSystem.Math機能しますが、はるかに遅くなり、ライブラリ関数のどれもそれをサポートしません。 それで、これはC#の問題でもありますか? (Monoではなく)Windowsのみをサポートする場合はどうなりますか? もしそうなら、私のプログラムを通常の倍精度で実行させる方法はありますか? そうでない場合、浮動小数点計算の一貫性を保つのに役立つライブラリはありますか?

7
「float」と「double」の精度
コード float x = 3.141592653589793238; double z = 3.141592653589793238; printf("x=%f\n", x); printf("z=%f\n", z); printf("x=%20.18f\n", x); printf("z=%20.18f\n", z); あなたに出力を与えます x=3.141593 z=3.141593 x=3.141592741012573242 z=3.141592653589793116 出力の3行目741012573242はガベージで、4行目116はガベージです。倍精度浮動小数点数は常に16の有効数字を持っていますが、浮動小数点数は常に7の有効数字を持っていますか?ダブルスに14の有効数字がないのはなぜですか?
155 c  floating-point 

3
0.1を複数回追加しても損失がないのはなぜですか?
私が知っている0.1小数点数が有限進数(と正確に表現できない説明)ので、double n = 0.1いくつかの精度を失うことになると、正確ではありません0.1。一方、0.5なので正確に表現できます0.5 = 1/2 = 0.1b。 0.1 3回追加しても正確には得られない0.3ので、次のコードが出力されることは理解できると述べましたfalse。 double sum = 0, d = 0.1; for (int i = 0; i < 3; i++) sum += d; System.out.println(sum == 0.3); // Prints false, OK しかし、それでは、0.1 5回追加すると正確にどのようになるのでしょう0.5か。次のコードは出力しますtrue: double sum = 0, d = 0.1; for (int i = 0; …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.