APPLE落下部門

[ポール・カーティス]はSEGGERの上分裂を計算に関するブログ記事の興味深いシリーズを持っています。これは熱いトピックでしたが、最近は多くのコンピュータやコンピュータ言語は内蔵の乗算と除算をサポートしています。しかし、一部のプロセッサは、命令と、それは理想的とは言えないかもしれない行うためのライブラリを欠いています。あなたはスピードやスペースを最適化することを可能にするかもしれないあなた自身をロールバックする方法を知っています。除算を行うには、ニュートンのアルゴリズムを使用して、現在の割賦カバー。

スティーブ・マーティンは、億万長者になると税金を払うことはありません方法についての有名なビットを持っていました。彼はまず…数百万ドルを取得します」、と言って始まりました。あなたが最初にあなたが分割することができます前に掛け合わせる方法を知っている必要があり以来続いて…」このメソッドは、少しそのようなものです。基本的な前提は2つあり:ニュートン法を使用すると、連続した乗算による逆数の推定値を洗練して、逆数は分割と同じ数を乗じてみましょう。私たちは6で34を分割する必要がある場合はつまり、あなたは* 1/6 34に6分の34を書き換えることができ、答えは同じです。

逆数のためのニュートンの近似は、あなたが答えを推測を取り、その後、一連の乗算を通してそれを絞り込むことができます。各乗算は、より良い精度を作成します。あなたは、古典的なスピード/スペースのトレードオフを実行するためにこれを使用することができます。たとえば、ちょうど私達がバイト(おそらく固定小数点バイト)の逆数を見つけたいとしましょう。 256個の要素のルックアップテーブルは、完璧な精度を提供することになると非常に高速になります。これ以上の数学は必要ありません。しかし、何についての32ビット?今の表では、あまりにも大きいです。しかし、あなたは、ルックアップする32ビットの番号の最初の8ビット、言うことができます。以上。以下。あなたにとって重要なものに依存します。

だから今、あなたはあなたの逆数の貧弱な推定値を持っています。サー・アイザックはそれを改善することができます。いくつかの数aについて、あなたは一緒にあなたの見積もり(x)と乗算それらを取ります。 2からその数を引くと、新しい見積もりを取得することにより、古い推定値を乗算する係数を有します。先にスキップ、あなたの推定が正しかった場合、乗算はあなたにすべての古い推定値を変更しないだろう1を与えるだろう明らかです。見積もりがオフになっている場合は、倍率を取得します。

式として、それは次のようになります。

X = X *(2 * X)。
あなたは22の逆数は0.02であるかもしれないを決めるのであれば、最初のパスはあなたを与えるだろう。

0.02 *(2-22 * 0.02)= 0.0312

0.0312 *(2-22 * 0.0312)= 0.0410

0.0410 *(2-22 * 0.0410)= 0.0450
正しい答えは、循環小数0.0454545であり、あなたが続けるならば、あなたはそこに取得します。

もちろん、あなたは分裂を行うための1以上の時間を掛けなければなりません。

我々は、ポストは、固定小数点実装を有しており、次にARM、RISC-V、およびdsPIC30ため、得られたアセンブリコードを検査することを好みました。まあ価値読みます。

我々は、アセンブリ言語で使用できる数学のトリックが大好きです。あなたはAVRと浮動小数点で作業している場合、この方法をお見逃しなく。

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

Q2、PDP8様ディスクリートトランジスタコンピュータQ2、PDP8様ディスクリートトランジスタコンピュータ

[Joe WinGberMuehle]は、古いコンピュータに関心があり、ディスクリートのトランジスタからのPerfoard上のコンピュータを構築するための過去の経験があるので、次のプロジェクトQ2は単一のPCB上のPDP8様マイクロコンピュータの完全な実装DEC PDP-8のように、これは12ビットのマシンですが、DECのダイオードトランジスタロジックの代わりに、実質的に小さいQ2は基本的なNMOSアプローチを使用します。また、DECはコアメモリを持っていますが、Q2は、とにかく離散的な2N7002トランジスタで繰り返しのメモリ構造を作りたいのですが 簡単なメーカーの配置のためのSMTコンポーネント PDP-8と同様に、このメーカーはビットシリアルALUを使用しています。これにより、1ビットあたり1ビットあたりのクロックサイクル、すなわち単一のALU操作を必要とすることを犠牲にして、回路をさらに通常のALU構造よりもはるかに小さいことができます。 12クロックサイクルがかかります。この機械では、命令サイクルタイムはとにかく8または32クロックで、最大80 kHzで、それは正確に速い(そしてPDP-8よりも実質的に遅い)ではありませんが非常に小さいです。小さく、完全に形成されています。 メーカーは、1094トランジスタから、10kのプルアップ抵抗を使用して、NMOS構成のロジックを持ちます。これは回路を構築するための高速な方法ではありませんが、非常にコンパクトです。ロジックファンアウトをチェックアウトすることで、[Joe]が大きなファンアウトを持つ領域を特定し、10 Kから1 Kのプルアップ抵抗を最小化しました。 。供給電流は500 mA以下に保たれ、基板をUSBコネクタから電源を供給させることができました。頭いい! メモリは、2つのバッテリバック6264 SRAMの礼儀があり、4つの12ビットの汎用レジスタは離散トランジスタから構築されています。ボード上のLCDスクリーンは素晴らしいタッチで、プログラムエントリとユーザー入力に使用される「フロントパネル」スイッチを拡張します。フロントパネルのプログラミングスイッチが少し面倒でエラーが発生している場合に備えて、40ピンヘッダが追加されました。 インジケータ付き離散トランジスタD型フリップフロップ最新の回路は2N7002 NMOSに切り替わりました。 プロジェクトの書き込みの観点から、verilogモデルを利用できるようにするには、カスタムメイドのプログラミング言語[Joe]がQ2Lを呼び出して、コンパイラとアセンブラを備えています(錆で書かれています)。 !ヘビのようなたくさんのクールなデモ。人生のゲームやポンのゲームは、本当に魅力的なタッチを追加してください。素晴らしいもの! 私たちは長年にわたり類似したプロジェクトの多くを特集しました。これは素晴らしいものです、本当に小さい4ビットの1つと、本当に大きなものです。

Elliot:LINはハッカーのためのものですElliot:LINはハッカーのためのものです

最近のgreybeardメカニックであるgreybeardメカニックを尋ねるだけで、彼の「キャブレター」ラントを始めてください。これらのシステムとサブシステムの全ては、電気的に敵対的な環境で互いに話す必要があり、誤解、または遅延通信さえも大きな結果を得ることができるという誇張ではありません。車のネットワーキングは主要な事業です。自動車の大量生産は、非自動車用ハードウェアハッカーのための関連するトランシーバICS低コストを多数する。それでは、この驚くべきリソースベースを活用するより多くのハッカープロジェクトを見るのはなぜですか? 自動車のネットワークのバックボーンは、コントローラエリアネットワーク(CAN)です。 Hackaday自身の[Eric Imechick]は、カーハッカーの臨時調整業者で、あなたが後で読むためにブックマークしたいマルチパートシリーズのCANバスについて知っておくべき多くのすべてを書きました。エンジン、ブレーキ、ドア、およびすべての計装データレビュー(差動)レビュー速くて高い信頼性です。それはまた複雑で実装するのが少し高価です。 1990年後半に、多数の生産者は、自動車ネットワークの非臨界部品のために缶と走る独自の独自のバスプロトコルを持っていました。それはそのようなクリティカルでローカルコミュニケーションのメインのCANバスを散らす価値がないので、サブネットワークはメイン缶から減速されました。これらはメインネットワークのスピードまたは信頼性の保証を必要とせず、そして費用の理由から、それらが実装が容易でなければならなかった。最小のマイクロコントローラは、窓を上下に転がすのに十分であるべきですね。 2000年代初頭では、ローカルインターコネクトネットワーク(LIN)仕様はこれらのサブネットワークに1つの方法を標準化し、1つのマスターマイクロコントローラと少数のスレーブの間の通信のための低コスト、中速、再構成、および予測可能な動作に焦点を合わせて、クラスタ安く、シンプルで、小型のマイクロコントローラで実装可能、そして中規模のプロジェクトに最適ですか?ハッカーの夢!なぜあなたはあなたの複数マイクロプロジェクトでLinを使っていないのですか?掘り下げましょう。 LINプロトコル LIN「クラスター」が、標準的なミニネットワークがJargonで呼び出されたもので、単一のマスターマイクロコントローラと数のスレーブで構成されています。 LINは通常19,200ボーで、従来の8N1 UARTシリアルとして始まり、1つのワイヤで離れています。次に、このシングルワイヤを複数のスレーブ間で共有するバスとして使用できるプロトコルを追加します。簡単なUARTシリアル通信のために独自のネットワークプロトコルをロールロールしようとした場合は、Linのようなものになりました。仕様書(PDF)のコピーを取得して読んでください。 すべてのLINトランザクションは基本的に同じです。マスターは、実行されるタスクを指定する保護された識別子(PID)を含むヘッダーを送信します。タスクは、「レポート温度センサ2」または「サーボ3位置の設定」のようなものにすることができます。タスクによっては、1バイトのチェックサムで、1~8バイトのデータが続きます。スレーブは、どのタスクが対応するか、およびどのように対応するかを知る必要があります。したがって、「サーボ3位置を設定する」が送信された場合、サーボ3スレーブは次のバイトを聴き、それに応じて反応する必要があります。コマンドに応答しないすべてのスレーブは、次のプリアンブルまでデータを無視できます。 「レポート温度センサ2」の場合、コマンドを受信した直後に温度センサを有するスレーブがそのデータを送信する。バイト長は事前に知られており、センサ2のみがこのタスクに応答することが許可されているため、マスターは正確に、つまり反応の4バイトを聞くことを知っており、それがどのくらいの時間を知っています。 マスター送信ヘッダーとスレーブ送信反応を持つこのポーリングシステムは、どのデバイスも同時にバスにアクセスしないことを保証します。プリアンブルには、スレーブがマスタークロックにロックするのに役立つ同期バイト(0x55)が含まれているため、スレーブはより安価なRCクロックソースで動作し、自動搭載が可能です。 メッセージの長さが前もって知られているので、マスターのポーリングルーチンのタイミングをスケジュールで書き留めることができます。マスターはネットワークを定義された間隔でポーリングし、スレーブがトランザクションに必要な時間の1.4倍以内に応答しない場合は、アクションが欠落していると推定されます。どちらの方法でも、マスターはそのスケジュールの次の項目に進み、そのターンが再び歩き回るまで潜在的に欠陥のあるスレーブを再試行しません。これにより、すべてのデバイスのアップデートレートが保証されており、ライフはマスターをプログラミングするためにLOLが簡単になります。 それらは基本です。マスターはPIDSを送信し、一連のデータバイトが続きます。小さなネットワークを作成するためにできるだけ簡単に適応された、すべてのComfy Old UART、呼び出しと応答。 extr Interalive ViからのGUI LIN設定アプリデオ。 簡単にネットワークを維持するには、マスターとスレーブがすべてコマンドセットと有効な反応長を同意することを要求しています。これは、原則としてLINクラスタが機能するのに必要な情報の多くです。やや問題を解決するのを助けてください。 C用の従来のAPIは、Masterマイクロコントローラとスレーブマイクロコントローラの両方がLINクラスタ内の符号化動作を処理するために使用できることもあります。組み合わされた、これは、LINバスを特定して実装するための従来のワークフローを作ります – 自動車メーカーにとって非常に有用であり、ハッカーのためには役に立たない。 関連するスリープ信号とウェイクアップ信号を使用して、バスに定義されている睡眠状態と動作もあります。すべてのスレーブはスリープ信号に応答する必要があり、それらがマスターから聞いたことがない場合は4秒のタイムアウト後に自動的にスリープ状態になる必要があります。ノード、スレーブまたはマスターは、wakeupコマンドを送信できます。その後、マスターが通常のポーリングスケジュールに戻るべきです。 LINバージョン2.0には、ネットワークをはるかに柔軟にするオプションのフレームタイプがいくつか含まれていました。特に、「散発的なフレーム」は、最後の更新で新しいデータを取得していない場合は、スレーブの反応をオプションにします。 「イベントトリガフレーム」は、新しいデータを持つ任意のスレーブノードによって追加的に応答できることを除いて、散発性フレームのようなものです。 これにより、バス上の衝突の可能性が紹介され、その場合、チェックサムが追加されず、マスターは以前と同じようにスレーブ固有のフレームに戻ります。これら2つのモードは、データの更新がまれであるときにバスを高速化しますが、コードにスケジュールと条件付きの複雑さにいくつかの不確定性を追加します。必要な場合にのみ使用してください。 マスターには複数のスケジュールを持ち、それらの間で切り替えることもできます。スレーブは気にしない

伝統ポケットベルネットワークを生命に戻す伝統ポケットベルネットワークを生命に戻す

[Jelmer]は、最近、動きの途中で彼の古いページャを発見しただけでなく、ページを取得する彼の優れた記憶を解決するのと同じくらい終了することを決定しました。彼はすぐにポケットベルの番号が完全に停止されただけでなく、ポケットベルの数はもはや活動的ではなかったことがわかりました。彼のポケットベルを人生に戻すために、[Jelmer]はPocsag RF Pagerプロトコルをエミュレートする彼自身のOpenwrtベースのポケットベル基地局を開発しました。 [jelmer]ページャを開始して、どのプロトコルが使用されているかを判断するだけでなく、彼のポケットベルを開始しました。すぐに彼はPocsag Pagerプロトコルを実装するデコーダICと同様にRF受信機を発見しました。 [Jelmer]は、スパースPocsagのマニュアルを経て、プロトコルを自分自身を実装するのに十分な情報を組み立てました。 [Jelmer]彼のビルドの頭脳のためにHLK-RM04 WiFiルーターモジュールを利用し、これはSI4432 RFトランシーバを制御するATmegaと協議します。ルータはOpenWRTを実行し、SI4432 ICによって送信されるPOCSAG管理信号を生成します。 [Jelmer]は、この構成を効果的に活用して、マニュアルを持ち上げた数のページ担当者に送信し、将来カスタマイズ可能なアラートを送信するための設定を利用する計画をしています。 [Jelmer]このガジェットを操作することは、常に多くの国で違法である可能性があるため、このプロジェクトに対処する前に地域の頻度の割り当てと法律を検査してください。 Pagerが[Jelmer]の送信機によって初期化された場合の休憩の後にビデオを調べてください。