問題タブ [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 投票する
3 に答える
2319 参照

c# - IEEE754浮動小数点を決定論的な方法で固定小数点に変換する方法は?

32ビットIEEE754浮動小数点を符号付きQ19.12固定小数点形式に変換する必要があります。問題は、完全に決定論的な方法で実行する必要があることです。したがって、通常の(int)(f *(1 << FRACTION_SHIFT))は、非決定論的な浮動小数点演算を使用するため、適切ではありません。「ビットいじり」または同様の決定論的変換方法はありますか?

編集:この場合の決定論は次のように想定されます:同じ浮動小数点データが与えられた場合、異なるプラットフォームでまったく同じ変換結果が得られます。

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

java - 高速パフォーマンスを備えたJavaの固定小数点演算

Javaでいくつかの数値を完全な精度で表現し、小数点以下の小数点数を固定する必要があります。その小数点以下は気にしません。(より具体的には-お金とパーセンテージ。)

今はJava独自のBigDecimalを使用しましたが、非常に遅く、アプリケーションに表示され始めていることがわかりまし

したがって、「通常の」整数と固定小数点演算を使用して解決したいと思います(長い整数は、私の目的には十分な精度があります)。

さて、私はこの種の問題を抱えている最初の人ではないと思います。すでに乗算/除算が実装されているそのためのライブラリがすでに存在するでしょうが、そうではないようです。

今、私はおそらく自分でそれを書くことができます(そして私はおそらくそうするでしょう)が、本当に、私は本当にこれを必要とする最初の人ですか?そのためのライブラリはすでにありませんか?

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

c++ - 浮動小数点演算結果の再現性

浮動小数点算術演算で異なる CPU で異なる結果が得られる可能性はありますか? CPU とは、x86 と x64 のすべてを意味します。そして、異なる結果とは、重要度の低いビットが1つだけ異なる場合でも..異なるマシンで同じ入力に対応するまったく同じ結果を得ることが不可欠なプロジェクトで浮動小数点演算を使用できるかどうかを知る必要があります。

編集: c++ タグを追加しました。
また、明確にするために、再現可能な結果のランタイムが必要です。異なるコンパイルで同じ結果が得られるとは思いません。

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

image-processing - PMULHRSWに0x8000を-1.0ではなく1.0として処理させる方法はありますか?

8ビットピクセルを処理するために、情報を失うことなくガンマ補正などを行うには、通常、値をアップサンプリングし、16ビットなどで処理してから、8ビットにダウンサンプリングします。

さて、これは私にとっては少し新しい分野ですので、間違った用語などを許してください。

私のニーズのために、私は「非標準」Q15で作業することを選択しました。ここでは、範囲の上半分(0.0-1.0)のみを使用し、0x8000は-1.0ではなく1.0を表します。これにより、Cでの計算がはるかに簡単になります。

しかし、SSSE3で問題が発生しました。Q15の数値を乗算するPMULHRSW命令がありますが、Q15の「標準」範囲は[-1,1-2⁻¹⁵]であるため、(my)0x8000(1.0)に0x4000(0.5)を乗算すると0xC000(- 0.5)、0x8000は-1であると見なすため。これはかなり迷惑です。

私は何が間違っているのですか?ピクセル値を0000〜7FFFの範囲に保つ必要がありますか?この種の固定点フォーマットであるという目的を打ち負かしませんか?これを回避する方法はありますか?多分いくつかのトリック?

Q15には、これらすべてについて論じているある種の決定的な論文がありますか?

0 投票する
1 に答える
778 参照

fixed-point - 固定小数点を実際の値 (10 進数) に変換する

私が持っているマイクロコントローラは、ASIC IC によって固定小数点形式 Q24 (24 ビット) で生データを提供します。

私は小数に変換する必要があります

どこ

範囲生データは 0 ~ 10066329

実際の値を uint 32bit で計算し、小数点以下 2 桁または 3 桁の精度を維持したいと考えています。

たとえば、フルスケールの生データが10066329の場合、小数点以下 2 桁の精度の実際の値は15000または になり、小数点以下 3 桁になります150000

これを行う方法は次のとおりです-スケールファクタ(ただし、データが32ビットでオーバーフローしないように生データの精度を下げる必要があります)-浮動小数点(MCUを効率的にしません)

どのオプションを選択すればよいですか?

ここにも投稿しました

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

python - Pythonに整数を科学的記数法から除外させるにはどうすればよいですか?

フレーズを暗号化してから復号化するメソッドをPython3.2で作成しようとしています。問題は、数値が非常に大きいため、Pythonがそれらを使用して数学を行うと、すぐにそれを科学的記数法に変換することです。私のコードは科学的記数法を機能させるためにすべての数字を必要とするので、これは役に立ちません。

私が持っているのは:

基本的に、私はユーザーから番号を取得し、それにいくつかの計算を行います。

私は他のいくつかのことを試しformat()ましたが、それらを機能させることができません。

編集:私は偶数の整数のみを使用します。

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

c++ - 特定の(ゲーム)プロジェクトで固定小数点数を使用する可能性を判断するにはどうすればよいですか?

私のケースはゲームプロジェクトに関連しているので、この質問をGameDevに投稿することを検討しましたが、これはより広範なプログラミングSEに適していると思いました。結局、この質問をそこに投稿したほうがいいかどうか教えてください。

私の理解から-そして私が間違っている場合は訂正してください-モバイル向けのゲーム開発(私の場合)は、固定小数点計算を採用することでかなりの利益を得ることができます。デバイスが浮動小数点を適切に処理するための設備が整っていない場合。

ただし、固定小数点には制限があり、特にオーバーフローがあります。したがって、私の質問は、ターゲットプラットフォームを考慮して固定小数点が最良の代替手段であると判断した場合、特定のプロジェクトの要件がそれらの使用を許可するかどうかを判断する方法です。

わかりやすくするために、問題が発生しているコードを少し共有したいと思います。

このプロジェクトでは、C ++を使用し、固定小数点数の独自の実装(16ビットと32ビットの両方があり、現在は32ビットを使用しています)とVectorクラスが付属するMarmaladeSDKを使用しています。 (CIwVec2)は、位置と計算にその実装を使用します(上記のコードに示されているスカラー乗法を含む)。ああ、IW_FIXEDは、浮動小数点数を固定小数点に変換するための単なるマクロです。

上記のコードを実行しようとすると、乗算オーバーフローエラーが発生します。次のように値をデバッグします。

正直なところ、固定小数点数については完全には理解していません。私はその考えを理解していますが、固定小数点演算は私には完全には明確ではありません(基数2に関連するほとんどの数学のクラスを捨てたに違いありません)。しかし、1.0f * 400.0fのような単純なものが固定小数点のオーバーフローを引き起こすという事実に、私は完全に困惑しています。

したがって、プロジェクトで固定小数点をサポートすることに問題はないと思いましたが、そうではないようです。このゲームはトップダウンの自動車ゲームであり、巨大なトラックなどはありませんが、少なくともデバイスの画面と同じ大きさ(またはさらに良いのはその解像度)である必要があります。タブレットの場合も、1.0f * 400.0fのような問題があるということは、固定小数点が問題外であることを意味します。

私はこの仮定で正しいですか?そして、将来のプロジェクトや同様の問題を抱えている他の人々のために、プロジェクト内の固定小数点数の実行可能性をどのように評価できますか?また、16ビットと32ビットのどちらを選択するかは大きなボーナスになります:)

(長い投稿をお詫び申し上げます。お時間をいただきありがとうございます!)

アップデート:

したがって、これまでの回答を少しまとめてください。理想的なシナリオは、ニーズに必要な範囲を持つように固定小数点数を実装することです(Mooing Duckの回答)。また、32ビットの数値を使用する操作の場合、最も安全な方法は、64ビットを使用して計算することです(timdayの回答とMaxのコメント)。ちなみに、マーマレードにはいくつかの「安全な固定乗算」関数がありますが、CIwVec2のスカラー乗算演算子のオーバーロード(IW_FIXED_MUL下を使用し、安全に乗算されない)には当てはまりません。

そして最後に、私の特定のシナリオに関しては、マーマレード6.1の時点で、フロートを使用するだけがおそらく最良の解決策であるように思われます。

編集: マックスの答えは私の問題を本当に解決しましたが、それは主にマーマレードに固有のものだったためです。そのため、一般的に多くの人に役立つと思うので、MooingDuckの回答を選択しました。

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

c++ - なぜこのように乗算を実行するのですか?

私はこの機能に遭遇しました:

インラインコメントは私のものです。2 つの引数を乗算しているだけのようです。これは正しいですか、それとももっとありますか? なぜこれがそのような方法で行われるのでしょうか?

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

c# - 固定小数点除算を行うにはどうすればよいですか?

long を使用して 8 バイトの固定小数点数を取得しました。定数の分母は (1 << 24) です。2 つの Fixed8 値の除算を行うにはどうすればよいですか? 私は C# を使用しているため、単純に大きな整数にキャストすることはできません。それとも、言語について考えすぎているのでしょうか?

ありがとう。

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

double - 固定小数点 <-> 倍精度

符号付き変換についての洞察が必要です。

C ルーチンへの入力は、-Pi から pi の範囲にあることが保証されています。これは「double」データ型で渡されます。

私のデバイスには FPU がないため、24 ビット レジスタの固定小数点を使用して、入力に対して数学 (Pi で入力を除算) を実行する必要があります。

範囲がわかっているので、入力データを Q3.10 形式で保存できます。

そう:

由緒あるprintfを使用して、一部を印刷することを確認できます。

したがって、2.5678 などの入力の場合、分数は 0.81483 として正しく識別されます。

負の数は同じように扱われますか?

-1.757 を渡すと、上記の計算は失敗します。printf は正の割合 1.442410 を報告します。しかし、FP_DataQ123 の 16 進数値は問題ないようです (0xB8a0e8)。符号ビットは正しく 1 に設定されています。

私は後でこれをしました:

printf は正しい分数 0.557 を報告するようになりましたが、マイナス記号はありません。

FP_DataQ123 を補完せずに printf に -0.557 を出力させるにはどうすればよいですか?