問題タブ [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.
c++ - C++ 固定小数点ライブラリ
重複の可能性:
C++ 固定小数点ライブラリ?
C++ の「シンプルな」(そして効率的な :)) 固定小数点ライブラリを知っていますか? (ブーストのものを使いたくない)
http://www.efgh.com/software/fixed.htmを見ました
試したことはありますか?
c# - バイナリ固定小数点のバイト[]を浮動小数点値に変換する
ソケット経由でデータを読み取っています。整数データ型は問題ありません。System.BitConverter メソッドは変換を正しく処理しています。(つまり、エンディアンの問題は心配する必要がないと思いますか?)
ただし、 BitConverter.ToDouble はデータの浮動小数点部分に対しては機能しません...ソース仕様は私にとっては少し低レベルですが、より重要な方向に正のバイトオフセットを持つバイナリ固定小数点表現について話しています。重要でない方向の負のバイト オフセット。
私が行った調査のほとんどは、C++ またはサインとコサインを処理する完全な固定小数点ライブラリを対象としており、この問題にはやり過ぎのように思えます。誰かが、たとえば-3バイトのオフセットを持つ8バイトのバイト配列からfloatを生成するC#関数を手伝ってくれませんか?
要求されたフォーマットの詳細:
固定小数点データの符号付き数値は、2 進の 2 の補数表記を使用して表されます。固定小数点データの場合、各データ パラメータの値は、参照バイトに関連して定義されます。参照バイトは 8 ビット フィールドを定義し、測定単位は LSB 位置にあります。参照バイトの LSB の値は 1 です。バイト オフセットは、参照バイトに対するデータ要素の最下位バイトの位置を示す符号付き整数によって定義されます。データ要素の MSB は符号ビットを表します。パラメータの絶対値の MSB と最上位バイトの MSB の間のビット位置は、符号ビットと同じ値でなければなりません。
浮動小数点データは、IEEE ANSI/IEEE Std 754-2008 に準拠したバイナリ浮動小数点数として表されます。(この文は、レッドニシンである可能性がある別のセクションからのものです)。
c++ - 高速固定小数点 pow、log、exp、および sqrt
固定小数点クラス (10.22) があり、pow、sqrt、exp、log 関数が必要です。
残念ながら、これをどこから始めればよいかわかりません。有用な記事へのリンクを提供してくれる人、またはコードを提供してくれる人はいますか?
exp 関数があれば、 pow と sqrt を実装するのが比較的簡単になると思います。
私が難しいと感じているのは、それらの exp 関数と log 関数だけです (ログ規則のいくつかを覚えているかのように、それ以外のことはあまり覚えていません)。
おそらく、sqrt と pow のためのより高速な方法もあるでしょう。
注意: これはクロス プラットフォームであり、純粋な C/C++ コードである必要があるため、アセンブラーの最適化は使用できません。
fixed-point - 15.16 数値の固定小数点乗算/除算
固定小数点 15.16 の数値を乗算および除算するアルゴリズムを探しています。
私はすでに足し算と引き算をしています。それらは簡単でした-単純な32ビットの加算と減算。乗算と除算を使用して、多くの三角関数と指数/対数関数を追加することもできます。そして、私のライブラリには逆数関数があり、それを使用して除算を実装できるため、乗算だけで処理できると思いますa * (1/b) = a / b
。ただし、基数を無視するため、32 ビットの乗算は機能しません。
私は 16 ビットのマイクロコントローラーで作業しているので、プロセッサーで約 4 サイクルかかる 32 ビット以上の乗算は避けたいと考えています。重要ではありませんが、浮動小数点演算を置き換えようとしているだけです。
結果をシフトまたは回転する必要があると聞いたことがありますが、これがどのように役立つか、具体的にどのようにシフトするかはわかりません。任意の提案や助けをいただければ幸いです!
c - 固定小数点処理:uint16_tとuint_fast16_tの違いは何ですか?
私は16ビットの固定小数点プロセッサを持っていて、それを使って固定小数点処理をしたいと思っています。符号なし16ビット整数に使用する正しいデータ型を探しています。
uint16_t
私の質問は:aとの違いは何uint_fast16_t
ですか?(これらはに含まれていstdint.h
ます。)uint_fast16_t
速いので良いですか??
ありがとう!!
c++ - C ++:エミュレートされた固定小数点除算/乗算
私はFixedpointクラスを書いていますが、ちょっとした問題にぶつかりました...乗算、除算の部分、エミュレートする方法がわかりません。私は除算のオペレーターに非常に大まかな刺し傷を負いましたが、それは間違いだと確信しています。これまでのところ、次のようになります。
私は...あまり良いプログラマーではありません、ハハ!
クラスの「部分」は16ビット幅です(ただし、修正される前にオーバーフローの可能性があるための余地が必要だと思うので、長い32ビットとして表されます)。整数部分である「値」についても同じことが言えます。'part'がその操作の1つで0xFFFFを超えると、上位16ビットが' value'に追加され、次に、下位16ビットのみが残るようにパーツがマスクされます。これは、初期化リストで行われます。
質問するのは嫌ですが、このようなドキュメントをどこで見つけることができるか、あるいは「トリック」やこれら2つの演算子の実行方法を誰かが知っているなら、私はそれをとても嬉しく思います!私は数学に関してはばかです、そして誰かが以前にこれをしなければならなかったことを知っています、しかしグーグルを検索することは私を約束の地に一度も連れて行かなかった...
c# - .NET - C# に固定小数点数値データ型がないのはなぜですか?
固定小数点データ型には多くの用途があるようです。.NET にないのはなぜですか?
注:固定小数点の目的とニーズに合わせて独自のクラス/構造体を作成できることを理解しています。それは私の質問ではありません。MS が固定小数点数値データ型を含めないことにした理由を知りたいです。
c - 固定小数点乗算のアルゴリズム
タイムスタンプ (秒の小数部のみ) をナノ秒 (10^-9 秒単位) から NTP タイムスタンプの下半分 (2^-32 秒単位) に再スケーリングしようとしています。事実上、これは 4.2949673 を掛けることを意味します。しかし、浮動小数点演算や 32 ビットを超える整数を使用せずにそれを行う必要があります (実際、これは実際には 8 ビット マイクロコントローラー用に書いているため、32 ビット演算でさえ、特に除算ではコストがかかります)。
かなりうまく機能するいくつかのアルゴリズムを思いつきましたが、数値的方法に実際の根拠がないため、それらを改善する方法、またはより正確で他のアルゴリズムに関する提案をいただければ幸いです。 /またはより高速。
アルゴリズム 1
最初の 2 つの定数は、正しい数値をオーバーシュートするのではなく、わずかにアンダーシュートするように選択され、最終的な係数 67078 はこれを修正するために経験的に決定されました。正しい値の +/- 4 NTP 単位内の結果を生成します。これは +/- 1 ns です。許容範囲ですが、残差はns
. 別の用語を追加できると思います。
アルゴリズム 2
4.2949673 の 2 進展開に基づいています (実際には 2.14748365 の 2 進展開に基づいています。これは、丸めを行うために 2 倍にして 1 を追加することから始めているためです)。おそらくアルゴリズム 1 よりも高速です (まだベンチマークを取得していません)。+3 は、すべての下位ビットを切り捨てることによるアンダーシュートを相殺するために経験的に決定されましたが、可能な限り最善の仕事をするわけではありません。
android - OpenGL ES でのオルソ プロジェクションの問題
私は Open GL ES を使用して Android で作業しています。UI を Android ビューから 3D に移動しようとしています。頂点の配置で奇妙な動作が見られます。
私は2つの異なるクワッドを持っています。1 つは -0.5,-0.5 -> 0.5,0.5 で、もう 1 つは 0,0 -> 1,1 ですが、レンダリングすると、両方が重なり合って表示されます。あたかもそれらが両方とも 0,0 -> 1,1 であるかのように (直交投影は 0,0 から 1,1 に設定されます)。どちらも同じパイプラインを介して送信されているため、これがどのように発生するかはわかりません。
別の奇妙でおそらく関連する問題。クワッドの 1 つに 0.5 の平行移動を与えると、0,0 -> 1,1 の投影で予想されるように半分だけ移動するのではなく、完全に画面全体に移動します。
ここに Java からのいくつかのスニペットがあります...
//固定小数点クラス public static final int FIXED_POINT = 16;
//頂点設定 mNumVerts = 6;
//と....
//投影設定
//与える
android - RotateAnimation を使用して固定点を中心に Android で ImageView を回転させる
定点を中心に連続して画像を 360 度回転させたいと思います。私はすでに次のようないくつかの例を見てきました。
これにより画像が回転しますが、円弧/円形のパスで回転します。すなわち。画像は円を描くように移動/回転していますが、開始位置に固定されていません。
私が基本的に望んでいるのは、WindMill の腕の回転を模倣することです。
何かご意見は?