問題タブ [fpu]
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-preprocessor - autoconf で #define の値を指定する方法は?
SYSV386_COMPAT 0
マクロを定義して、いくつかの FPU オペコードを生成する方法を変更することにより、ロックを解除した動作で Gnu binutils を構築しようとしています。
ヘッダー ファイルにアクセスして値を手動で設定することは簡単ですが#define SYSV386_COMPAT 0
、コマンド ラインで同等の値を指定するには、configure スクリプトをどのように呼び出すのでしょうか。可能であれば、コマンドラインで何かを指定したいと思います (機能が推移的であり、ソースをハッキングする必要はないと思うからです)。そうは言っても、少なくとも FM の一部を読み取ろうとしましたが、 または に を挿入することはできませんAC_DEFINE(SYSV386_COMPAT, 0)
でしbinutils/configure.in
たgas/configure.in
。
assembly - 除算 8086/8087 1/3 = 3?
fdiv
!!!!の使用に大きな問題があります。私は分割しようとして1/3
いるので、これが私がしていることです
ご覧のとおり、結果が表示さresultado
れないため、結果をに移動しますst(0)
(tasm を使用しているため、デバッガーで変数を確認でき3EAAAA3A
ます) 40400000
。3
どのように可能ですか?? 変数を交換してみましたが、何もありません!!! 手伝って頂けますか??=(
assembly - FILD と FSTP の仕組み
私はネット上で検索しましたが、それが言うところならどこでも:FILDは整数の2の補数を80ビットの拡張精度浮動小数点数に変換し、浮動小数点数スタックの一番上に置きます。そのため、プログラムにそれを実行させましたが、得られる結果は予期しないものです。
例: メモリに 0xFF20A810 という数字があります (0x40000000 としましょう) fild [0x40000000] fstp [0x40010000]
結果は 0x41EFE41502000000 です。数値はどのように変換されますか? 私はこれを使用するクラックミーの真っ只中にいますが、解決策が見つかりません。
ありがとうございました
c - 浮動小数点数が与えられたときにFPUを回避する方法は?
まあ、これは最適化の問題ではありません。
私は(今のところ)いくつかの位置の平均を見つける必要がある単純なLinuxカーネルモジュールを書いています。これらの位置は、浮動小数点(つまりfloat
)変数として格納されます。(私はすべての作者なので、それを変更することはできますが、フロートの精度を維持し、回避できる場合はそれに関与しないようにします)。
現在、これらの位置の値は、単に保存するためにカーネルに保存されます(または少なくとも使用されます)。1つのユーザーアプリケーションがこれらのデータを書き込み(共有メモリを介して(私はRTAIを使用しているので、カーネルとユーザースペース間で共有メモリを使用しています))、他のアプリケーションはそこから読み取ります。float変数からの読み取りと書き込みはFPUを使用しないので、これは安全だと思います。
安全とは、カーネルでFPUを回避することを意味します。言うまでもなく、一部のシステムにはFPUさえありません。kernel_fpu_begin / endを使用するつもりはありません。これは、タスクのリアルタイム性を損なう可能性があるためです。
カーネルモジュールでは、(位置はとにかく平均化されているので)実際にはそれほど精度は必要ありませんが、0.001までは必要です。私の質問は、FPUを使用せずに、浮動小数点数を整数(元の数の1000倍)に移植可能に変換するにはどうすればよいですか?
フロートのビットパターンから手動で数値を抽出することを考えましたが、エンディアンがどのように影響するかわからないため、またはすべてのアーキテクチャのフローティングポイントが標準である場合でも、それが良いアイデアかどうかはわかりません。
assembly - アセンブリFPUスタックの破壊; 結果は-1。#IND
私は一般的にアセンブリ、特にFPUの使用法に慣れていません。
乱数の配列の標準偏差を計算する学校の課題を書いています。
配列がロードされ、平均計算が正常に機能します。プロセス全体は、7個以下の値の配列に対して機能しますが、8個以上の要素の配列サイズに対して-1。#IND(これはNaNを意味しますか?)を返します。
(mean --element)^2値を合計するループ内で何かが発生しています。何が起こっているのかわかりませんが、FPUスタックが何らかの形で壊れていると思います。
誰かが私を正しい方向に向けることができれば、私は完全に喜んでいます。
fla = REAL8
gcc - 浮動小数点引数を持つ数学関数内でデバッガーが停止する
私はチップをプログラムするためにコンパイラ(ARM EABI用のSourcery Codebenchlite)を使用Keil uVision
しています。gcc
STM32F4 cortex M4
私が設定したコンパイラ制御文字列は次のとおりです。
デバッガーがいくつかの数学関数 ( など) に遭遇すると、デバッガーはasinf()
停止atan2f()
します。
これらの関数の引数も単精度であることを確認しました。
浮動小数点を使用するためのコンパイラ ディレクティブが欠落していることが原因だと思いますが、VFP
特定できませんでした。
見逃したものはありますか?
私が行った例の逆アセンブリコード:
デバッガーは atan2f(0.3,0.4) を評価できますが、atan2f(a,b) を評価すると 0x0803B9CA で停止します。変数ではなく、数値が機能する理由がわかりませんでした。
gcc - ハードウェア浮動小数点をサポートする GNU ARM ツールチェーン
STM32F4 Discovery ボードの作業を開始し、GCC 4.6.2 を含む最新の Yagarto ツールチェーンを使用していくつかの基本的なプログラムをコンパイルして実行しました。最近、いくつかのフォーラムで、最新の Yagarto を含む多くのツールチェーンが、オンボード ハードウェア FPU の使用に関して問題を抱えていることを知りました。また、最新の CodeSourcery ツールチェーンはハードウェア浮動小数点をサポートしていますが、ライト エディションではサポートしていないことも読みました!!
このトピックを深く掘り下げているときに、ARM Cortex M/R コントローラー専用のこのツールチェーンを見つけ、ハードウェア FPU に関しては問題がないと主張しています。
https://launchpad.net/gcc-arm-embedded
ハードウェア FPU の問題が実際に Yagarto に存在するかどうか、ユーザーの経験から知りたかったのですか? 私は ARM7 にも取り組んでおり、yagarto もそれをサポートしているため、Yagarto の使用に興味があります。したがって、アーキテクチャごとに異なるツールチェーンを用意する代わりに、ARM7 と Cortex M/R の両方に 1 つのツールチェーンを用意するのが妥当です。
FPU の問題が実際に存在する場合、ARM7 と Cortex M/R の両方で試行錯誤された優れたツールチェーンを提案してくれる人はいますか?
PS : BeagleBoard (Cortex A-8) 用に CodeSourcery の最新の GNU Linux ツールチェーンを使用していますが、まだ問題に直面していません。
assembly - x86-64アセンブリで浮動小数点数を使用するには?
一部の x86-64 アセンブリに苦労しており、浮動小数点数が頭を悩ませています。たとえば、このコードを実行すると:
この関数は、次のような C コードから呼び出されます:printf("%Lf \n", func() );
残念ながら、結果は奇妙な数値になりますFIADD
... 私はすでに大量の資料を掘り下げましたが、ここの誰かが適切な FPU チュートリアルを教えてくれたり、彼女/彼の経験と知恵を共有したりできるかもしれません :)
要点のまとめ:
- 言語: x86-64 アセンブラー
- アセンブラ: リポジトリからインストールされた nasm v. 2.09.04
- コンパイラ (C 用): gcc v. 4.5.2 (Ubuntu と共にインストール)
- OS: Oracle VM 上の Ubuntu 11.04 64 ビット
- ホスト OS: Windows 7 SP1 64 ビット
- プロセッサー: Intel i5 - 2430M 64bit (2 回チェック:D )
- 問題: FPU が 2 つの数値を加算できません :(
念のため:最終的にはFSINCOS
他の派手なFPU命令を使用したいと思っていますが、単純な追加でさえ失敗するように見えます...
よろしくお願いします!
gcc - GCC (インライン アセンブラ) を使用して FPU に double をロードする
GCCインラインアセンブリdouble
を使用してFPUにロードしようとしています。FLD
AT&T の構文に詳しくなく、Web 上で何も見つけられなかったので、助けていただければ幸いです。私の意図は、 to のアドレスをロードしa
てEAX
からFLD [EAX]
...
assembly - FILD、FSTP、および FST の組み立て手順
だから私は今日この亀裂を解決しています。いくつかの最後の指示を除いて、シリアル生成ルーチンを見つけて理解することができました。初めてアセンブリでkeygen を書くことにしました。シリアル ルーチンの最後のいくつかの命令にたどり着くまで、すべてが順調に進んでいました。私は MASM と Intel アセンブリを使用しています (Intel、AT&T、これらをどのように呼びますか?) これは私の現在のコードです:
そして、これはプログラム自体の実際のシリアル ルーチンです。
このルーチンは、EAX で終了するシリアルを計算し、それをスタックにプッシュしてから、私が理解している限り、FILD を使用して FPU スタックにプッシュし、FSPT を使用して FPU から取り出して EBP-410 に入れます。 FLD は EBP-410 を FPU に再度プッシュし、最後に FSTP を使用して sprintf のパラメーターとして ESP+8 に格納します。ここではスプリントと strcmp はあまり重要ではありませんが、何が起こっているのかをよりよく理解できるように、とにかくそれらを含めました。
ちなみに、この LOCAL 194. は、フォーマットされた文字列が配置される場所です。
私はインターネットを検索し、これらの説明の説明を見つけましたが、これを自分の keygen に転送するのに役立つ実際の例や資料は見つかりませんでした。
最後の質問は、これを keygen に転送するにはどうすればよいですか? 「プログラムが動作を停止しました」というメッセージが常に表示されるか、シリアル ボックスに何も表示されません。私の SerialCalc ルーチンでコメントされている部分は、別の人のソリューションをはぎ取って動作するかどうかを試した部分ですが、残念ながら動作しませんでした。
問題の詳細や追加情報が必要な場合はお知らせください。
初心者でごめんなさい!
前もってありがとう、Tuntuni。