問題タブ [fixed-point]

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 投票する
9 に答える
65406 参照

c++ - 固定小数点演算を行う最良の方法は何ですか?

FPU を持たないニンテンドー DS のプログラムを高速化する必要があるため、(エミュレートされて遅い) 浮動小数点演算を固定小数点演算に変更する必要があります。

どのように私は始めたのですか? float を int に変更し、それらを変換する必要があるときはいつでも、x>>8を使用して固定小数点変数 x を実際の数値に変換し、 x<<8を使用して固定小数点に変換しました。すぐに、何を変換する必要があるかを追跡することは不可能であることがわかりました。また、数値の精度 (この場合は 8) を変更するのが難しいことにも気付きました。

私の質問は、どうすればこれを簡単かつ高速にできるのでしょうか? FixedPoint クラスを作成する必要がありますか、それとも FixedPoint8 typedef またはそれらを変換するための関数/マクロを含む構造体だけを作成する必要がありますか? 固定小数点であることを示すために、変数名に何かを入れる必要がありますか?

0 投票する
7 に答える
4704 参照

c++ - C++ の固定小数点表現には何を使用しますか?

財務データに使用する固定小数点標準を探しています。試してみる価値のあるものはありますか? その手作りの固定小数点クラスのパフォーマンスに関する経験はありますか?

0 投票する
6 に答える
10378 参照

language-agnostic - 4x4 行列の反転 - 数値的に最も安定した解が必要

4x4 マトリックスを反転したい。私の番号は固定小数点形式 (正確には 1.15.16) で保存されます。

浮動小数点演算では、通常、随伴行列を作成し、行列式で除算します (たとえば、力ずくで解を求めます)。これまでのところはうまくいきましたが、固定小数点数を扱う場合、すべての乗算が使用されるため、許容できない精度の低下が発生します。

注: 固定小数点演算では、常に即時結果の最下位ビットの一部を破棄します。

だから - 行列を反転するための最も数値的に安定した方法は何ですか? パフォーマンスについてはあまり気にしませんが、単純に浮動小数点に移行すると、ターゲット アーキテクチャが遅くなります。

0 投票する
7 に答える
3832 参照

optimization - 最近FixedPointを使用する場合

激しい数値計算のために、浮動小数点の代わりに固定小数点を使用することを検討しています。もちろん、固定小数点タイプのサイズが何バイトであるか、どのCPUで実行されるか、(Intelの場合)MMXやSSE、またはその他の新しいものを使用できるかどうかは重要です...

浮動小数点がこれまでになく速く実行される最近では、固定小数点を検討する価値があるのではないかと思います。数パーセント以上重要であると言える一般的な経験則はありますか?35,000フィートの数値パフォーマンスの概要は何ですか?(ところで、DSPや特殊な組み込みシステムではなく、ほとんどのコンピューターに見られる一般的なCPUを想定しています。)

0 投票する
6 に答える
50376 参照

c++ - 浮動小数点から固定小数点への変換

C++ で、浮動小数点値 (float) を固定小数点(int、16:16 または 24:8)に変換する一般的な方法は何ですか?

編集:明確にするために、固定小数点値には整数部分と小数部分の 2 つの部分があります。整数部分は、符号付きまたは符号なしの整数データ型で表すことができます。小数部分は、符号なし整数データ型で表されます。

わかりやすくするために、お金にたとえてみましょう。小数部分は、セント (ドルの小数部分) を表す場合があります。'cents' データ型の範囲は 0 ~ 99 です。固定小数点演算に 8 ビットの符号なし整数を使用する場合、小数部分は 256 の均等に割り切れる部分に分割されます。

これで問題が解決することを願っています。

0 投票する
3 に答える
6480 参照

sql-server-2005 - SQL Server 2005 で値を FLOAT にキャストする際のエラー

病気で外出中の同僚のためにストアド プロシージャを機能させようとしています (そのため、指導を求めることはできません)。

この正確な手順を持つ SQL Server 2005 データベースがあり、この開発データベースと一致するようにテスト データベースを変換するスクリプトを作成しようとしています。私のスクリプトには、次のような行がいくつかあります。

この手順は基本的に、「フィールド = @input である別のテーブルからテーブル (すべてのフィールド) に挿入する」ことを行っています。

スクリプトを実行すると、次のエラーが表示されます。

プロシージャは作成されません。しかし、開発環境とテスト環境の両方でソース テーブルを比較したところ、完全に一致しました。そして、手順は開発環境でスクリプト化されたとおりに存在します。

このスクリプトを作成するために特別なアクロバットを行う必要があったかどうか、同僚に尋ねることはできません。私はいくつかの検索を行い、おそらく float は FLOAT(6,1) (またはそのようなもの) の形式である必要があることを確認しましたが、それは彼が持っているものではありません。本当に開発者と一致しません。

追加した

コメント者は正しいです。エラーは次のキャストにあると言われました:

クエリ全体を投稿できますが、長いです。代わりに、キャストされたフィールドと、最初と最後のフィールドだけを含めます。その 1 つのフィールドが間違いだったのか、ストレート キャストが必要だったのか、同僚に尋ねたいと思います。彼は来週の月曜日に戻ってくるので、それまで待つ必要があるかもしれません.

our_File_CHAR は次のように定義されます

our_File は次のように定義されます

0 投票する
5 に答える
67578 参照

oracle - Oracle 浮動小数点数と数値

Oracle のドキュメントに矛盾する参照があります。10 進数を FLOAT に格納する方法とデータベースの NUMBER 型に格納する方法に違いはありますか?

C などから思い出したように、float には int にはない精度の制限があります。Rg、float の場合、0.1(Base 10) は 0.110011001100110011001101(Base 2) として概算されます。これは、およそ 0.100000001490116119384765625 (Base 10) のようなものです。ただし、int の場合、5(底 10) は正確に 101 (底 2) です。

これが、C で次のコードが期待どおりに終了しない理由です。

ただし、Oracle のドキュメントの他の場所で、FLOAT が NUMBER として定義されていることがわかります。私が理解しているように、Oracle の NUMBER 型の実装では、C の float と同じ問題は発生しません。

それで、ここで本当の話は何ですか?Oracle は、float/FLOAT で起こると予想される標準から逸脱していますか?

(私がそれらを使用する目的については、ハリケーンの中の蜂の屁の違いであると確信していますが、0.1 * 10が1.00000000000000001になると疑問が生じることはわかっています)

0 投票する
6 に答える
37728 参照

c# - C#の固定小数点演算?

ここで誰かが c# の固定小数点演算に適したリソースを知っているかどうか疑問に思っていましたか? 私はこれ ( http://2ddev.72dpiarmy.com/viewtopic.php?id=156 ) やこれ (固定小数点演算を行う最良の方法は何ですか? )のようなものを見てきました。は実際には固定小数点または実際には浮動小数点です (更新: レスポンダーは、それが間違いなく浮動小数点であることを確認しています)。

私のニーズは単純です。基本的な演算子に加えて、cosine、sine、arctan2、PI が必要です...それだけだと思います。多分平方。私は主に作業している2D RTSゲームをプログラミングしていますが、浮動小数点演算(倍精度)を使用するときのユニットの動きは、複数のマシンで時間の経過とともに(10〜30分)非常にわずかな不正確さを持ち、非同期につながります。これは現在、32 ビット OS と 64 ビット OS の間だけで、すべての 32 ビット マシンは問題なく同期しているように見えます。

私はこれを最初から考えられる問題として認識していたので、非整数位置計算の使用を可能な限り制限しましたが、さまざまな速度でのスムーズな斜め移動のために、ポイント間の角度をラジアンで計算しています。 sin と cos を使用して、運動の x 成分と y 成分を取得します。それが主な問題です。また、マシン間の問題を回避するために浮動小数点から固定小数点に移動する必要がある、線分の交点、線と円の交点、円と四角形の交点などの計算も行っています。

Java や VB、または他の同等の言語で何かオープン ソースがある場合は、コードを自分の用途に合わせて変換できます。私にとっての最優先事項は精度ですが、現在のパフォーマンスよりも速度の低下をできるだけ少なくしたいと考えています。この固定小数点演算全体は私にとって非常に新しいものであり、グーグルでの実用的な情報がほとんどないことに驚いています-ほとんどのものは理論または高密度のC++ヘッダーファイルのようです.

私を正しい方向に向けるためにあなたができることは何でも大歓迎です。これを機能させることができれば、私がまとめた数学関数をオープンソース化して、他の C# プログラマー向けのリソースを提供する予定です。

更新: コサイン/サイン ルックアップ テーブルを自分の目的に合わせて機能させることは間違いありませんが、約 64,000x64,000 エントリのテーブルを生成する必要があるため、arctan2 では機能しないと思います (yikes)。arctan2 のようなものを計算する効率的な方法のプログラムによる説明を知っていれば、それは素晴らしいことです。私の数学のバックグラウンドは大丈夫ですが、高度な数式と従来の数学表記をコードに変換するのは非常に困難です。

0 投票する
4 に答える
1782 参照

c - 変数を静的に初期化する (コンパイル時)

1) 私の C アルゴには多くの定数があります。2) 私のコードは浮動小数点と固定小数点の両方で動作します。

現在、これらの定数は関数 float2fixed によって初期化されており、浮動小数点では何もしませんが、固定小数点では固定小数点表現を見つけます。たとえば、浮動小数点で動作している場合、0.5f は 0.5f のままですが、pow() ルーチンを使用し、固定小数点で動作し、固定小数点表現が Qx.16 である場合は 32768 になります。

これは維持するのは簡単ですが、これらの定数を固定小数点で計算するには実際には多くの時間がかかります (pow は浮動小数点関数です)。C++ では、メタプログラミングを使用するので、コンパイラはこれらの値をコンパイル時に計算するため、実行時にヒットすることはありません。しかし、Cではそれは不可能です。またはそれは?そんな裏技知ってる人いますか?それを行うのに十分なほど賢いコンパイラはありますか?

回答をお待ちしております。

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

c++ - C /C++での数値変換

C / C ++のdoubleを64ビットの2の補数に変換する必要があります。ここで、基数の小数点はビット番号19(両端を含む)にあります。

これは、私が変換したいフォーマットについて

  • 0x0000 000000100000は番号1です
  • 0xFFFF FFFFFFF00000は数値-1です
  • 0x0000 000000000001は0.95x10^-6です
  • 0xFFFF FFFFFFFFFFFFは-0.95x10^-6です

これまで、C標準ライブラリのmodf関数の使用について説明してきましたが、それでは私のニーズを十分に満たすことができません。Boostのいくつかの型変換クラスも調べましたが、適切なソリューションも見つかりませんでした。この変換を行うためのライブラリまたは簡単な方法を知っている人はいますか?たぶん、ブーストに精通している誰かが私を正しい方向に向けることができます。

これがまったく役立つ場合は、doubleの保存方法に関するドキュメントを以下に示します。

編集:

フォローアップの質問があります、これは本当に私自身の利益のためです。「基数」とは何ですか?ここでは、小数点のようなものです。しかし、基数という用語を聞いたのは、離散高速フーリエ変換について学んでいたときだけでした。私の記憶が正しければ、DFTを計算するために必要な乗算が少ないため、基数IIの方法は高速です。