DIY FP-ハードウェアFPUなしでマイクロコントローラーに浮動小数点演算を実装する


8

私は浮動小数点演算を必要する小さな個人的なプロジェクト(視差プロペラを対象としていますが、これはかなり一般化できるはずです)に取り組んでいます。

私が使用しているマイクロコントローラーには、ネイティブの浮動小数点、または標準の浮動小数点ライブラリがありません。

ソフトウェアの浮動小数点演算の実装に関する優れたリソースまたはチュートリアルはありますか?できれば本当に限られたリソース(私はスタックさえありません!)


doubleサイズのあるフロートをサポートしたいのですが。プロペラは32ビットMCUなので、フロートごとに複数の変数を使用する必要があります。

私はプロペラ用のソフトウェア浮動小数点ライブラリが1つあることを知っていますが、サポートされているのはsingleサイズの浮動小数点数のみです。

いいえ、おそらく実際にはdoubleサイズの浮動小数点数は必要ありませんが、これは非常に興味深いプロジェクトのように聞こえます。私がこれをやりたいと思っている理由の半分は、途中で多くのことを学ぶからです。


どのコンパイラ?見逃したかもしれませんが、あなたが使用している言語がわかりません。
Kortuk 2012年

@Kortuk-私は個人的に視差プロペラをターゲットにしているので、それはスピンかasmのどちらかになります。ただし、これは言語固有のものではないはずです。一般的な操作(+-/ *ビットシフト、ビット単位、および/またはなど)があると仮定します。
コナーウルフ

実装する必要がある操作は何ですか?足し算、引き算、掛け算だけが必要で、エッジケース、NaNなどについてあまり心配していなければ、これを実装するのは簡単です。私は過去に8ビットマイクロコントローラー用に実行しましたが、すべてをasmで実行しても、それはマンモスタスクではありません。
Paul R

1
あなたが言うように、途中で浮動小数点演算を実装することについて多くを学びます。
Paul R

3
浮動小数点は必要ないかもしれません。小数だけが必要な場合は、小数点(実際の2進数)を使用して固定小数点演算を行うこともできます。アプリケーションについて詳しく教えてください。
豆腐

回答:


4

あなたがそれを自分でやりたいのなら、私はそれをやるだけだと思います。

リソースやチュートリアルはあまりないので、あまり多くのリソースやチュートリアルを見つけることはないでしょう。

ここに概要があります:

  • 加算/減算:
    指数の差が大きすぎる場合(仮数がビットよりも多い場合):
    指数が大きい値を返します(これが減数の場合:否定)

    指数が類似している場合:指数の
    差だけ小さい値の仮数をシフトし、
    結果が0でない場合は他の仮数に加算/減算します(固定小数点演算を使用):結果のMSBitが1になるまで仮数をシフトし、指数を同じ量デクリメントします

  • 乗算/除算:
    仮数の乗算/除算(固定小数点演算を使用)および指数の加算/減算


2

Catalina Cまたはgccのいずれかを使用して、プロペラでこの倍精度浮動小数点ライブラリを使用できるはずです。ただし、多くのアプリケーションでは遅すぎる可能性があります。


プロペラのCコードは、Spinまたはprop-asmと相互運用できますか?そうでなければ、私はそれをスピンに変換することに挑戦するかもしれません。幸い、あまりスピードは必要ありません。現実的には、2 Hzで7つの操作を行う必要があります。
Connor Wolf、

2
ああ、ソースだけでも1.1 MBで圧縮されています。ちょっとやり過ぎだと思います。より簡単なオプションはありますか?
コナーウルフ

2
さらに重要なことに、このライブラリは(1)任意精度の浮動小数点(32ビットや64ビットのようなネイティブサイズではない)であり、(2)i386およびx64 Intel、AMD、MIPSプロセッサ上のLinuxコンパイラをターゲットとしています。ソースフォルダーに「arm」と「generic」の言及がありますが、ここからは始めません。
Kevin Vermeer

2

この質問は問題を解決する以上に理解を求める傾向にあるようですので、これは最も有用な答えではないかもしれませんが、完全を期すためです。

http://code.google.com/p/propgcc/wiki/PropGccCompileOptions

GCCのプロペラバージョンがdoubleを含む浮動小数点サポートを持っていることを意味します。

GCCとそのコンパイラー・ライブラリーはもちろんオープンソースですが、コードが何をしているかを理解し始める前に、実際の学習曲線が存在する可能性があります。

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