国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

浮動(dòng)小數(shù)點(diǎn)の計(jì)算に問(wèn)題があるのでしょうか?
P粉071602406
P粉071602406 2023-08-20 16:48:26
0
2
954
<p>次のコードを考えてみましょう。</p> <pre class="brush:js;toolbar:false;">0.1 0.2 == 0.3 -> false </pre> <pre class="brush:js;toolbar:false;">0.1 0.2 -> 0.30000000000000004 </pre> <p>このような不正確さはなぜ起こるのでしょうか? </p>
P粉071602406
P粉071602406

全員に返信(2)
P粉347804896

ハードウェア設(shè)計(jì)者の視點(diǎn)

私は浮動(dòng)小數(shù)點(diǎn)ハードウェアを設(shè)計(jì)および構(gòu)築しているので、ハードウェア設(shè)計(jì)者の視點(diǎn)を追加する必要があると考えました。エラーの原因を知ることは、ソフトウェアで何が起こっているのかを理解するのに役立つ可能性があり、最終的には、浮動(dòng)小數(shù)點(diǎn)エラーが発生し、時(shí)間の経過(guò)とともに蓄積される理由がこれによって説明されることを願(yuàn)っています。

###1。概要###

エンジニアリングの観點(diǎn)から見(jiàn)ると、浮動(dòng)小數(shù)點(diǎn)計(jì)算を?qū)g行するハードウェアが必要とする誤差は最後のビットの半分未満のユニットだけであるため、ほとんどの浮動(dòng)小數(shù)點(diǎn)演算にはある程度の誤差が生じます。したがって、ほとんどのハードウェアは精度のみで停止し、最終ビットの半分単位未満の誤差を生成するだけで済みます。これは浮動(dòng)小數(shù)點(diǎn)除算で特に問(wèn)題となります。 1 つの演算を構(gòu)成するものは、ユニットが受け入れるオペランドの數(shù)によって異なります。ほとんどのユニットでは、これは 2 つのオペランドですが、一部のユニットは 3 つ以上のオペランドを受け入れます。したがって、時(shí)間の経過(guò)とともにエラーが蓄積されるため、繰り返し操作によって理想的なエラーが生成されるという保証はありません。

2.標(biāo)準(zhǔn)

ほとんどのプロセッサは

IEEE-754

標(biāo)準(zhǔn)に従っていますが、一部のプロセッサは非正規(guī)化された標(biāo)準(zhǔn)または異なる標(biāo)準(zhǔn)を使用します。たとえば、IEEE-754 には、精度を犠牲にして非常に小さな浮動(dòng)小數(shù)點(diǎn)數(shù)の表現(xiàn)を許可する非正規(guī)化モードがあります。ただし、次の內(nèi)容では、標(biāo)準(zhǔn)的な動(dòng)作モードである IEEE-754 の正規(guī)化モードについて説明します。 IEEE-754 標(biāo)準(zhǔn)では、ハードウェア設(shè)計(jì)者は、最後のビットの半分単位未満である限り、error/ε の任意の値を許可でき、結(jié)果は最後のビットの半分単位未満でなければなりません。 1回の操作で。これは、操作が繰り返されるとエラーが蓄積される理由を説明します。 IEEE-754 倍精度の場(chǎng)合、仮數(shù)とも呼ばれる浮動(dòng)小數(shù)點(diǎn)數(shù)の數(shù)値部分 (正規(guī)化) を表すために 53 ビットが使用されるため、これはビット 54 です (例: 5.3e5 の 5.3)。次のセクションでは、さまざまな浮動(dòng)小數(shù)點(diǎn)演算におけるハードウェア エラーの原因について詳しく説明します。

3. 割り算における丸め誤差の原因

浮動(dòng)小數(shù)點(diǎn)除算におけるエラーの主な原因は、商の計(jì)算に使用される除算アルゴリズムです。ほとんどのコンピュータ システムでは、主に

Z=X/Y

および Z = X * (1/Y) で除算の計(jì)算に逆乗法を使用します。除算は反復(fù)的に計(jì)算されます。つまり、必要な精度に達(dá)するまでサイクルごとに商の桁數(shù)が計(jì)算されます。IEEE-754 の場(chǎng)合、この精度は最後の桁の 1 単位未満の誤差です。 Y の逆數(shù)表 (1/Y) は、低速除算では商選択テーブル (QST) と呼ばれます。商選択テーブルの桁數(shù)は、通常、底の幅、または で計(jì)算された商の桁數(shù)になります。各反復(fù)に保護(hù)位置の數(shù)を加えたもの。 IEEE-754 標(biāo)準(zhǔn)の倍精度 (64 ビット) の場(chǎng)合、除算器の基本サイズにいくつかのガード ビット k を加えたものになります (k>=2)。したがって、たとえば、一度に 2 ビットの商 (基數(shù) 4) を計(jì)算する一般的な除算器の商選択テーブルは、2 2= 4 ビット (およびいくつかのオプションのビット) になります。

3.1 除算の丸め誤差: 逆數(shù)の近似

商選択テーブルの逆數(shù)は、 除算方法 : 低速除算 (SRT 除算など) または高速除算 (ゴールドシュミット除算など) によって異なります。各エントリは、除算アルゴリズムに従って変更されます。できる限り誤差を最小限に抑えます。いずれにしても、すべての逆數(shù)は実際の逆數(shù)の 近似であり、ある程度の誤差が生じます。遅い除算方法と速い除算方法はどちらも商を繰り返し計(jì)算します。つまり、各ステップで特定の數(shù)の商の桁が計(jì)算され、その結(jié)果が被除數(shù)から減算され、除數(shù)は誤差が単位の半分未満になるまでこれらのステップを繰り返します。最後の桁。遅い除算方法は、各ステップで固定數(shù)の商の桁を計(jì)算するため、一般的に安価ですが、高速の除算方法は、各ステップで可変數(shù)の商の桁を計(jì)算するため、一般に高価です。除算法の最も重要な點(diǎn)は、そのほとんどが逆數(shù)の 近似の繰り返しの乗算に依存しているため、エラーが発生しやすいことです。

4. 他の演算における丸め誤差: 切り捨て

すべての演算で丸め誤差が発生するもう 1 つの原因は、IEEE-754 で許可されているさまざまな切り捨てモードです。切り捨て、ゼロ方向丸め、round (デフォルト) 、切り捨て、および切り上げがあります。すべてのメソッドで、1 回の操作で発生するエラーは最後のビットの単位未満です。時(shí)間の経過(guò)と操作の繰り返しにより、切り捨ても累積してエラーが発生します。この切り捨て誤差は、何らかの形式で乗算を繰り返す指數(shù)演算において特に問(wèn)題となります。

5. 操作を繰り返します

浮動(dòng)小數(shù)點(diǎn)計(jì)算を?qū)g行するハードウェアは、単一の演算で最後のビットの誤差単位の半分未満の結(jié)果を生成するだけでよいため、監(jiān)視していないと、演算が繰り返されるにつれて誤差が増大します。有限誤差が必要な計(jì)算では、數(shù)學(xué)者が IEEE-754 を使用して最後の桁を偶數(shù)桁に丸めるなどの方法を使用するのはこのためです。時(shí)間の経過(guò)とともに誤差が互いに影響し合う可能性が高くなるためです。オフセットと Interval の変更を組み合わせます。算術(shù)およびIEEE 754丸めモードを使用して丸め誤差を予測(cè)し、修正します。最も近い偶數(shù)桁 (最後の桁) への丸めは、他の丸めモードと比較して相対誤差が低いため、IEEE-754 のデフォルトの丸めモードです。 デフォルトの丸めモード (最も近い

偶數(shù)桁

に丸める) では、演算の誤差が最後の桁の半分未満であることが保証されることに注意してください。切り捨て、切り上げ、切り捨てのみを使用してください

P粉790187507

バイナリ浮動(dòng)小數(shù)點(diǎn)これが數(shù)學(xué)の仕組みです。ほとんどのプログラミング言語(yǔ)では、IEEE 754 標(biāo)準(zhǔn)に基づいています。問(wèn)題の核心は、この形式では數(shù)値が整數(shù)と 2 の累乗の積、つまり分母が 2 の累乗ではない有理數(shù) (0.1 のように、##1 を掛けたもの) として表されることです。 /10) 正確な表現(xiàn)ができません。

標(biāo)準(zhǔn)の

binary64 形式の 0.1 の場(chǎng)合、その表現(xiàn)は として正確に記述できます。

    10 進(jìn)數(shù):
  • 0.1000000000000000055511151231257827021181583404541015625
  • C99 hexfloat 記法 0x1.99999999999ap-4
対照的に、有理數(shù)

0.1 (1/10) は、 と正確に書(shū)くことができます。

    10 進(jìn)數(shù):
  • 0.1
  • は、C99 の 16 進(jìn)數(shù)浮動(dòng)小數(shù)點(diǎn)表記の表現(xiàn)
  • 0x1.99999999999999...p-4 に似ています。ここで、... は、9 の無(wú)限のシーケンスを表します。
プログラム內(nèi)の定數(shù)

0.2 および 0.3 も、実際の値に近似します。正確に、0.2 に最も近い double は有理數(shù) 0.2 よりも大きいですが、double0.3## に最も近いです。 # は有理數(shù) ##0.3 より小さいです。 0.10.2 の合計(jì)は、有理數(shù) 0.3 よりも大きくなるため、コード內(nèi)の定數(shù)と矛盾します。 浮動(dòng)小數(shù)點(diǎn)演算のかなり包括的な扱いは、

すべてのコンピュータ科學(xué)者が浮動(dòng)小數(shù)點(diǎn)演算について知っておくべきこと

です。よりわかりやすい説明については、floating-point-gui.de を參照してください。 通常の 10 進(jìn)數(shù) (基數(shù) 10) にも同じ問(wèn)題が存在します。そのため、1/3 のような數(shù)値は 0.333333333... になります。

あなたは、10 進(jìn)法では簡(jiǎn)単に表現(xiàn)できるが、2 進(jìn)法では表現(xiàn)できない數(shù)値 (3/10) に遭遇しました。逆も (ある程度は) 當(dāng)てはまります。1/16 は、10 進(jìn)數(shù)では醜い數(shù) (0.0625) ですが、2 進(jìn)數(shù)では、10 進(jìn)數(shù)の 1 萬(wàn)分の 1 (0.0001) と同じくらいきれいに見(jiàn)えます* * - 使用に慣れていれば私たちの日常生活で 2 進(jìn)數(shù)體系を使用している場(chǎng)合、その數(shù)値を見(jiàn)ただけで、常に 2 で割れば求められることが直感的に理解できるでしょう。

もちろん、これは浮動(dòng)小數(shù)點(diǎn)數(shù)がメモリに格納される方法ではありません (浮動(dòng)小數(shù)點(diǎn)數(shù)は科學(xué)表記法を使用します)。ただし、これは、私たちが通常関心を持っている「現(xiàn)実世界」の數(shù)値は 10 の累乗である傾向があるため、2 進(jìn)浮動(dòng)小數(shù)點(diǎn)の精度エラーが発生する傾向があるという問(wèn)題を示しています。ただし、それは私たちが日常的に 10 進(jìn)數(shù)體系を使用しているからにすぎません。 -日単位。これが、「7 個(gè)中 5 個(gè)」ではなく 71% と言う理由です (5/7 は 10 進(jìn)數(shù)で正確に表すことができないため、71% は近似値です)。

だから、いいえ、2 進(jìn)浮動(dòng)小數(shù)點(diǎn)數(shù)に問(wèn)題はありません。他の N 進(jìn)數(shù)體系と同様に、不完全なだけです :)

実際には、この精度の問(wèn)題は、浮動(dòng)小數(shù)點(diǎn)數(shù)を表示する前に、丸め関數(shù)を使用して浮動(dòng)小數(shù)點(diǎn)數(shù)を目的の小數(shù)點(diǎn)以下の桁數(shù)に丸める必要があることを意味します。

また、等価性テストを、一定の許容差を許容する比較に置き換える必要があります。これは、次のことを意味します。

if (x == y) { ... }

は使用しないでください。

代わりに、if (abs(x - y) < myToleranceValue) { ... } を使用してください。

ここで、abs は絶対値関數(shù)です。 myToleranceValue は、特定のアプリケーションに基づいて選択する必要があります。これは、どの程度の「余裕」を許容するか、および (精度の損失による) 比較する最大數(shù)に大きく関係します。問(wèn)題)。選択した言語(yǔ)の「イプシロン」スタイル定數(shù)に注意してください。これらの定數(shù)は許容値として使用できますが、大きな數(shù)値を使用した計(jì)算ではイプシロンのしきい値を超える可能性があるため、その有効性は扱う數(shù)値のサイズによって異なります。

最新のダウンロード
詳細(xì)>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート