このような面接の質問と同様に、賢明な対応は反対の質問をすることです。質問を明確にし、曖昧さを解消することを目的とした賢明な質問は、受け取った知恵や教義を単に吐き出すのではなく、考えることができることを示しています。また、質問の範囲を狭めて、答えがより適切になりやすいようにします。この場合、浮動小数点のないMCUと浮動小数点を使用しないソフトウェア実装にはおそらく違いがあります。後者の場合、確かに固定小数点が適切ですが、多くのアプリケーションでは整数二乗ですルートで十分かもしれません-あなたはそれについて尋ねるかもしれませんが、この場合、isqrt(2)==1は適切ではないようです。前者の場合、この状況は浮動小数点の使用を排除するものではありません。
通常、浮動小数点を使用する場合の組み込みシステムの問題は、浮動小数点ユニット(FPU)がないため、ソフトウェアに実装されている浮動小数点演算がはるかに遅くなり、決定論的ではなくなることです。FPUの欠如、またはハードウェア整数の乗算または除算でさえ、浮動小数点の使用を排除するものではありません。これは、そのような操作がはるかに遅く、より大きなコードスペースを必要とすることを意味します。
ほとんどのシステムでは、ハードウェア浮動小数点のサポートがなくても、標準ライブラリの数学関数はソフトウェア浮動小数点でサポートされ、8ビットシステムでも通常どおり使用できますが、 Mega-FLOPSのパフォーマンスは期待できません。パフォーマンスが低下し、ライブラリ実装の非決定論的性質によってその使用が妨げられる場合があります。その場合、より高速またはより決定論的なパフォーマンスを返すアルゴリズムが多数あります。
根付く値が大きく、整数の結果が十分に正確である場合、純粋な整数の解が最速になりますが、一般的なケースでは、ニュートンラプソンが1つであるが、最適ではない可能性が高い解がいくつかあります-それはむしろバブルソートの平方根アルゴリズムです。パフォーマンスのためではなく、教えて理解しやすいために使用されます。
固定小数点を使用することは可能ですが、固有のデータ型ではないため、コードの記述とデバッグが容易でなくなる可能性があります。私はAnthonyWilliamsによって書かれたライブラリを使用しています。これはC++で記述されており、fixed
クラスを定義します。float
C ++の関数と演算子のオーバーロード機能は、ほとんどの浮動小数点コードを、またはdouble
で置き換えるだけで移植できることを意味しfixed
ます。ARMプロセッサでは、fixed
クラスはソフトウェア浮動小数点の約5倍の速度で実行されます。ただし、Anthonyのsqrtアルゴリズムは、記事The Neglected Art of Fixed Point Arithmeticに基づく実装でここで説明したように、改善することができます。-その記事のコードはCであるため、より一般的に適用できる可能性があります(C ++が利用できないか、実用的でない場合-それは別の議論ですが!)。
Jack Crenshawは、彼の著書 『 Math Toolkit for Real-Time Programming』のsqrt()関数に全章を捧げています。ここでは、ナイーブなニュートンラプソン実装から始めて、徐々に改良していきます。彼はまた、興味深いことに不動点ではありませんが、整数解を提示します。ジャックが本に含めているもののいくつかは、彼のジャーナル記事にすでに掲載されています。たとえば、彼の整数平方根の扱い。
いずれにせよ、私は次のように質問に答えるかもしれません:
標準ライブラリソフトウェアの浮動小数点パフォーマンス、精度、およびコードサイズへの影響を評価し、アプリケーション要件に対して不十分であることがわかった場合にのみ、確立されたアルゴリズムと場合によっては固定小数点演算を使用した最適化されたソリューションを検討します。
「確立されたアルゴリズム」という用語の使用に注意してください。特定のアルゴリズムの名前を知らない、または思い出せない可能性があるという事実を有効に排除します。実際に言っているのは、どのアルゴリズムが適切かわからないということですが、私はありそうもないので、車輪の再発明をするほど愚かではありません。まだ入手できないものよりも優れたものを考え出すために、そして慎重な調査と評価を通して、可能であれば、私は望ましい結果を達成するでしょう。面接対象者がその答えを思いつき、事前に賢明な質問をした場合、それは許容範囲を超えていると思います。もちろん、インタビュアーはあなたほど頭が良くないかもしれません、そして彼が「正しい」と信じているという特定の答えを心に留めているかもしれません「1つ。そのような独断的な反応を示す組織で働きたくない場合があります。面接は双方向のプロセスです。組織に面接して、サービスのメリットを提供するかどうかを確認します。