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

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

21
Javaでdoubleを使用して精度を保持する
public class doublePrecision { public static void main(String[] args) { double total = 0; total += 5.6; total += 5.8; System.out.println(total); } } 上記のコードは出力します: 11.399999999999 これをどのようにして印刷する(またはそれを11.4として使用できるようにする)ことができますか?


2
gccのffast-mathは実際に何をしますか?
gccの--ffast-mathフラグを使用すると、浮動小数点演算の速度が大幅に向上し、IEEE標準の範囲外になることを理解していますが、オンになっているときに実際に何が起こっているかについての情報を見つけることができません。誰かが詳細のいくつかを説明して、フラグがオンまたはオフの場合に何かがどのように変化するかについての明確な例を示すことができますか? 同様の質問についてSOを掘り下げてみましたが、ffast-mathの仕組みを説明するものは何も見つかりませんでした。



12
2つの等しくない浮動小数点数を引くことによって0を取得することは可能ですか?
次の例では、0(または無限大)による除算を取得できますか? public double calculation(double a, double b) { if (a == b) { return 0; } else { return 2 / (a - b); } } もちろん、通常はそうなりません。しかし、どのような場合aとb非常に接近している、できる(a-b)ことになり0、計算の精度が原因? この質問はJavaに関するものですが、ほとんどのプログラミング言語に当てはまると思います。

12
Cに符号なし浮動小数点数がないのはなぜですか?
質問は奇妙なようです。プログラマーは時々考えすぎます。読んでください... CIでは整数signedとunsigned整数を使用します。符号なし整数に符号付き整数を割り当てるなどのことを行うと、コンパイラーが警告するという事実が気に入っています。符号付き整数と符号なし整数などを比較すると、警告が表示されます。 私はこれらの警告が好きです。彼らは私が私のコードを正しく保つのを助けます。 フロートに同じ贅沢をしてみませんか?平方根が絶対に負の数を返すことは決してありません。負の浮動小数点値が意味をなさない他の場所もあります。符号なしフロートの完璧な候補。 ところで-私は、浮動小数点数から符号ビットを削除することで得られる精度の1つの余分なビットにあまり興味がありません。float彼らは今であるので、私はsにとても満足しています。浮動小数点を符号なしとしてマークし、整数で取得するのと同じ種類の警告を取得したいだけです。 符号なし浮動小数点数をサポートするプログラミング言語については知りません。 それらが存在しない理由は何ですか? 編集: x87 FPUには、符号なし浮動小数点数を処理するための命令がないことを知っています。署名されたfloat命令を使用できます。誤用(たとえば、ゼロ未満になる)は、符号付き整数のオーバーフローが未定義であるのと同じように、未定義の動作と見なすことができます。

7
C#Float式:結果のfloatをintにキャストするときの奇妙な動作
次の簡単なコードがあります: int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp; speed1speed2同じ値でなければなりませんが、実際には次のようになっています。 speed1 = 61 speed2 = 62 キャストではなくMath.Roundを使用する必要があることはわかっていますが、値が異なる理由を理解したいと思います。 生成されたバイトコードを見ましたが、ストアとロードを除いて、オペコードは同じです。 私はjavaでも同じコードを試しましたが、62と62を正しく取得しました。 誰かがこれを説明できますか? 編集: 実際のコードでは、直接6.2f * 10ではなく、関数呼び出し*定数です。私は次のバイトコードを持っています: のためにspeed1: IL_01b3: ldloc.s V_8 IL_01b5: callvirt instance float32 myPackage.MyClass::getSpeed() IL_01ba: ldc.r4 10. IL_01bf: mul IL_01c0: conv.i4 IL_01c1: stloc.s …

10
html5入力タイプ番号で浮動小数点数と小数点記号を処理する方法
主にモバイルブラウザー用のWebアプリを構築しています。数値タイプの入力フィールドを使用しているため、(ほとんどの)モバイルブラウザーは数値キーボードのみを呼び出してユーザーエクスペリエンスを向上させます。このWebアプリは主に小数点ではなくカンマの領域で使用されるため、両方の小数点を処理する必要があります。 この混乱全体をドットとコンマでカバーする方法は? 私の発見: デスクトップChrome 入力タイプ=数値 ユーザーが入力フィールドに「4,55」を入力します $("#my_input").val(); 「455」を返します 入力から正しい値を取得できません デスクトップFirefox 入力タイプ=数値 ユーザーが入力フィールドに「4,55」を入力します $("#my_input").val(); 「4,55」を返します それは問題ありません。カンマをドットに置き換えて、正しい浮動小数点数を取得できます Androidブラウザー 入力タイプ=数値 ユーザーが入力フィールドに「4,55」を入力します 入力がフォーカスを失うと、値は「4」に切り捨てられます ユーザーを混乱させる Windows Phone 8 入力タイプ=数値 ユーザーが入力フィールドに「4,55」を入力します $("#my_input").val(); 「4,55」を返します それは問題ありません。カンマをドットに置き換えて、正しい浮動小数点数を取得できます ユーザーがコンマまたはドットを小数点記号として使用する可能性があり、より良いユーザーエクスペリエンスを提供するためにHTML入力タイプを数値として保持したい場合、このような状況での「ベストプラクティス」は何ですか? キーイベントをバインドして、コンマを「オンザフライ」でドットに変換できますか。数値入力で機能しますか? 編集 現在のところ、解決策はありません。タイプが数値に設定されている入力から浮動小数点値(文字列または数値として)を取得する方法。エンドユーザーが「4,55」と入力すると、Chromeは常に「455」を返し、Firefoxは「4,55」を返します。 また、Android(テスト済み4.2エミュレーター)で、入力フィールドに「4,55」と入力してフォーカスを別の場所に変更すると、入力した数値が「4」に切り捨てられるのも非常に煩わしいです。




19
round()が適切に丸められていないようです
round()関数のドキュメントには、数値と、小数点以下の位置を丸めて渡すと記載されています。したがって、これを行う必要があります: n = 5.59 round(n, 1) # 5.6 しかし、実際には、古き良き浮動小数点の奇妙さが忍び寄り、次のような結果になります。 5.5999999999999996 UIのために、を表示する必要があります5.6。私はインターネットをざっと見て、これがPythonの実装に依存しているというドキュメントを見つけました。残念ながら、これは私のWindows開発マシンと私が試した各Linuxサーバーの両方で発生します。こちらもご覧ください。 私自身のラウンドライブラリを作成する以外に、これを回避する方法はありますか?

11
float値をテンプレートパラメータとして使用できないのはなぜですか?
floatテンプレートパラメータとして使用しようとすると、コンパイラはこのコードを要求しますが、int正常に動作します。 floatテンプレートパラメーターとして使用できないからでしょうか? #include<iostream> using namespace std; template <class T, T defaultValue> class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass <int, 10> gcInteger; GenericClass < float, 4.6f> gcFlaot; cout << "\n sum of integer is …

8
フロートするPHP文字列
私はPHPにまったく詳しくないので、簡単な質問をしました。 2つの変数pricePerUnitとがありInvoicedUnitsます。これらを値に設定するコードは次のとおりです。 $InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits); $pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit); これを出力すると、正しい値が得られます。5000請求済みのユニットと1.00価格について考えてみましょう。 今、私は費やした合計金額を表示する必要があります。これら2つを掛け合わせると機能しません(期待どおり、これらは文字列です)。 しかし、PHPで変数を解析、キャスト、変換する方法はわかりません。 私は何をすべきか?

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