ポータルフィールドニュース

ポータルフィールドニュース

in ,

💴|1個130円のモノを2個買ったら261円取られた。どうしてそうなるの?


写真 

1個130円のモノを2個買ったら261円取られた。どうしてそうなるの?

 
内容をざっくり書くと
税抜価格に消費税相当額を上乗せする際に1円未満の端数が生じる場合、どのように処理(切り捨て、切り上げ、四捨五入)をして税込み価格を設定するかは、事業者ごとの判断となっています(※1)。
 

130円のモノを2個買うと261円になるワケとはどうして、そうなるのか。これは消費税のせいです。もう… →このまま続きを読む

 ファイナンシャルフィールド

「お金にまつわる疑問や、悩みを解りやすく解決」をモットーにファイナンシャルフィールドは毎日、記事を配信しております。学費、相続、ローン、投資、保険など、相談しにくい悩みもファイナンシャルフィールドが解決。
ユーザーさまの疑問や、お金にまつわる最新のトレンドを、ファイナンシャルプランナー、弁護士、公認会計士、税理士などのプロがニュースを解りやすく配信しております。


Wikipedia関連ワード

説明がないものはWikipediaに該当項目がありません。

消費税相当額

端数処理

端数処理(はすうしょり)とは、与えられた数値を、ある一定の丸め幅の整数倍の数値に置き換えることである。平たく、丸め(まるめ)ともいう。常用的には、十進法で10となる数値の累乗(…100、10、1、0.1、0.01…)が丸め幅とされることが多いが、十進法以外のN進法についても同様である。

丸めの種類

凡例

丸めは任意の丸め幅に対し可能だが、以下では特に断らない限り、丸め幅を1とする。任意の丸め幅で丸めるには、丸める前に丸め幅で割り、丸めた後に丸め幅をかける。

主に正数について述べるが、負数についても適宜述べる。

切り捨て・切り上げ

整数部分をそのまま残し、小数点以下を0とする丸めを切り捨てという。それに対し、小数点以下が0でなかった場合整数部分を1増やし、小数点以下を0とする丸めを切り上げという。

負の数を考えると、切り捨て・切り上げに準ずる丸めは、4種類ある。それぞれ「○○への丸め」と呼ばれる。

符号を無視して絶対値を丸める場合、切り捨ては、常に0へ近づく(または変わらない。以下では省略)ので「0への丸め (rounding toward zero; RZ)」、切り上げは、常に数直線上の無限遠点へ近づくので、「無限大への丸め (rounding toward infinity; RI)」と呼ばれる。単に切り捨て・切り上げというと、これらをさす。

逆に、正数の場合と増減を同じ向きにする場合は、切り捨ては、常に減るので「負の無限大への丸め (rounding toward minus infinity; RM)」、切り上げは、常に増えるので「正の無限大への丸め (rounding toward plus infinity; RP)」と呼ばれる。

切り捨て・切り上げは、最も計算が単純な丸めである。その一方で、丸め誤差上界が1(最大が1近い)と大きい。さらに悪いことに、誤差が常に同じ符号であるというバイアスがあり、丸めた数を多数足し合わせると、個数に比例して丸め誤差が累積する。この欠点のため、限られた目的にしか使われない。

数値が増えては困る/減っては困る場合は、切り捨てや切り上げが使われる。

  • 安全基準は、常に安全な方に丸められる。
  • 誤差不確かさは、切り上げられる。
  • 数値が実際より増えると誇張・虚偽・捏造・難解と見なされる恐れがあるときは、切り捨てられる。
  • 数値が実際より減ると矮小化・虚偽・捏造と見なされる恐れがあるときは、切り上げられる。

(広義の)最近接丸め

丸め誤差を小さく抑えるには、常に最も近い整数(2つある場合はそのうちどちらか)に丸めればいい。これを「最近接丸め (round to the nearest)」という。ただし、単に「最近接丸め」というと、後述する「偶数への丸め」を意味することが多いので注意。

最近接丸めでは、丸め誤差は最大で1/2となる小数(以下「半分小数」。十進法の0.5や、十二進法の0.6など)で、切り捨て・切り上げの半分になる。バイアスも、端数がランダム([0,1)で一様分布)の場合は発生しない。端数がランダムでなく端数が半分小数が有限の割合で発生する場合のみバイアスが発生するが、それでも、切り上げ・切り捨てより格段に少ない(端数が全て小数化すると半数になる、十進法0.5のデータを四捨五入する、十二進法0.6のデータを五捨六入するいったワーストケースでは同じ程度になる)。

端数がちょうど半数だった場合どちらに丸めるかで、いくつかの変種がある。

四捨五入

十進法では、端数が0.5未満なら切り捨て、0.5以上なら切り上げる「半数切り上げ」の丸めを「四捨五入」という。JIS Z 8401で規則Bとして定められている[1]。 「四捨五入」という呼び名は、小数第一位が4以下ならば切り捨て、5 以上ならば切り上げることに相当することから来ている。一般にはR丸めとも言う。(「ある程度」というのは、1.0 の半分が 0.5 であるということは記数法に無関係な、量(数量)としての関係だからである。小数点からずれた位置での丸めは記数法の影響が大きいが、小数点のひとつ左にある「ーの位の桁」の重みが1である、ということは記数法の影響を受けない。[要校閲]

正数に対しては、0.5を足して切り捨てるという、単純なアルゴリズムで得られる。なお、負数に対して正常な結果を得ようとすれば、切り捨ては負の無限大への丸めである必要がある(0への丸めだと、たとえば−2が−1に丸められてしまう)。ただし、0.5を足して負への無限大へ丸めると、端数が0.5の場合に絶対値が減る(たとえば、−1.5は−1へと丸められる)。一方、JIS Z 8401では、負数は絶対値として丸める(−1.5は−2へと丸められる)。実際に、コンピュータで負の数に「0.5を足して切り捨て」た場合どうなるかは、負数と切り捨ての実装による[1]

端数が0.5のとき常に増える方向に丸められるため、(端数がランダムでない場合は)わずかに正のバイアスが発生しうる。

五捨五超入

端数が0.5以下なら切り捨て、0.5超なら切り上げる丸めを「五捨五超入」という。

0.5は常に切り上げられる四捨五入とは逆の特徴を持つ。端数がランダムでない場合は、わずかに負のバイアスが発生しうる。

正の数に対しては、0.5を引いて切り上げることで得られる。

偶数への丸め(round to even)

偶数への丸め(round to even)[2][3]は、端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げ、端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める。JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている[1]

端数0.5のデータが有限割合で存在する場合、四捨五入ではバイアスが発生するが、偶数への丸めではバイアスが無い。つまり、多数足し合わせても、丸め誤差が特定の側に偏って累積することがない。ただし、偶数+0.5は現れるが奇数+0.5は現れないデータのように分布に特殊な特徴がある場合は、バイアスが発生することがある。

単に「偶数丸め」「最近接丸め」とも呼ばれる。JIS Z 8401で定められていることから「 JISの丸め方[4]」、あるいは同様にISO 31-0で定められていることから「ISO丸め」ともいう。英語では、誤差の累積を嫌い銀行家が好んで使ったため「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう[5]。5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、端数がちょうど0.5の場合に整数部分が偶数なら「ゼロへの丸め」奇数なら「無限大への丸め」[6]になるので「偶捨奇入」と呼ばれたりもする。

奇数への丸め(round to odd)

奇数への丸め(round to odd)[2]は、偶数への丸めの対称である。端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げという点は最近接丸めとして同様だが、端数がちょうど0.5なら切り捨てと切り上げのうち結果が奇数となる方へ丸める、という点が偶数への丸めの逆である。

端数0.5のデータが有限割合で存在する場合、四捨五入ではバイアスが発生するが、奇数への丸めではバイアスが無い。つまり、多数足し合わせても、丸め誤差が特定の側に偏って累積することがない。ただし、偶数+0.5は現れるが奇数+0.5は現れないデータのように分布に特殊な特徴がある場合は、バイアスが発生することがある。

実用上は最近接丸めとなる丸め

定義は最近接丸めになっていないが、最近接丸めと等しくなる場合にのみ実用される丸めがいくつかある。

五捨六入

小数第一位が5以下ならば切り捨て、6以上ならば切り上げる丸めを「五捨六入」という。ただし、後述するように五捨六入は十進法十二進法では異なり、十進法では「半数切り捨て」が五捨六入で、十二進法では「半数切り上げ」が五捨六入である。この節では、十進法で「半数切り捨て」を指す五捨六入について述べる。

0.4を足して切り捨てることで得られる。0.55が0へ丸められることから、五捨六入が最近接丸めではないことがわかる。端数がランダムなデータに対しは、やや強い負のバイアスがあるため、そのようなデータに対し五捨六入が使われることはまずない。

五捨六入が実用的なのは、端数が0.1の整数倍のみを取りうる場合に限られる。この場合の五捨六入は、0.1〜0.5で切り捨て、0.6〜0.9で切り上げ(0.5超0.6未満は発生しない)なので、最近接丸めの一種の五捨五超入と同じ結果となる。

例えば、麻雀のとあるローカルルールでは、最終的な得失点を五捨六入する。この場合の端数は常に0.1の整数倍(100の倍数を、1000の倍数に丸める)なので、丸め結果は五捨五超入である。

コンピュータでは、プロセッサによっては四捨五入と五捨六入を均等に使い分け、バイアスを0にする工夫がなされているものがある。

四捨六入

アルシーアル麻雀得点計算では、かつて端数処理が行われる前の段階の計算による得点を丸めるときに四捨六入と呼ばれるものが採用されていた。これは丸める桁が必ず偶数になるためであり、実質的には最近接丸めである。また、#偶数への丸めが「四捨六入」と呼ばれる事例もある。

スウェディッシュ・ラウンディング

ニュージーランドでは現金での支払いの際、スウェディッシュ・ラウンディングと呼ばれる方法で端数処理が行われている。「スウェディッシュ・ラウンディング」とは、十進法で二捨三入七捨八入と呼ばれる方法である。

5を単位とした端数が3未満なら切り捨て、3以上なら切り上げとなる。

端数がランダムな場合は、五捨六入と同様に非実用的である。しかし通常は、1刻みのデータに対し5を丸め幅として丸めるので、その結果は最近接値への丸めである。

IEEE丸め

IEEE 754で丸めモードとして定められている

  • 最近接丸め(偶数)
  • 0への丸め
  • 正の無限大への丸め
  • 負の無限大への丸め

の4つを「IEEE丸め」と総称する。

特殊な丸め

乱数丸め

[0,1)の一様乱数を発生させ、端数以上なら切り捨て、端数より小さければ切り上げる。

一様乱数を足して切り捨てることで得られる。

丸め誤差は上界が1だが、分布が0近くに集まっているため、ランダムなデータに対する平均二乗誤差は切り捨て・切り上げよりは少ない。

任意の分布の端数に対して、バイアスがないのが特長である。たとえば、0~0.5の間に端数が多かったとすると、偶数への丸めでは負のバイアスが生まれるが、乱数丸めではバイアスがない。

ディザの一種として使われる。

フォン・ノイマン丸め

常に奇数側へ丸める。

二進法では、切り捨てた後LSBをセットするという、簡単なアルゴリズムで得られる。

丸め誤差は切り捨て・切り上げと同程度で大きいが、ランダムなデータに対してはバイアスがないという性質は持っている。

2回以上の丸めの禁止

同じ数値を2回以上丸めてはいけない。偶数への丸めの場合で、切り捨て過ぎてしまう例と、切り上げ過ぎてしまう例を説明する。

  • 122.51 は 123 に丸められなければならない。しかし、まず 122.5 とすると、次は 122 になり、切り捨て過ぎになる。
  • 123.49 も 123 に丸められなければならない。しかし、まず 123.5 とすると、次は 124 になり、切り上げ過ぎになる。

簡単な原則のように思えるかもしれないが、時に難しい問題を引き起こすことがある。たとえば、計算しているなんらかの値が、「偶数 + だいたい0.5」というような値になった時、それが「0.5ちょうどか、もしかしたら少し小さい」という場合は切り捨てできるが、それと対称的であるにもかかわらず「0.5ちょうどか、もしかしたら少し大きい」という場合は、「もしかしたら」の部分をはっきりさせなければ、正しい丸めができない。「奇数 + だいたい0.5」では逆になる[7]

以下の数値を上であげたような端数処理により有効数字 2 桁にする場合を考える。

もとの数値切り捨て切り上げ四捨五入五捨六入偶数への丸め
8.058.08.18.18.08.0
8.158.18.28.28.18.2
8.258.28.38.38.28.2
8.268.28.38.38.38.3
8.348.38.48.38.38.3
8.358.38.48.48.38.4
8.458.48.58.58.48.4

コンピュータでの丸め

低レベルの丸め

choppingは、あるビット以下を全て0にする。これは最も計算が簡単な丸めで、正の数に対しては切捨てとなる。負数に対する動作は負数の方式によるが、2の補数表現では負の無限大への丸めとなる。

choppingは、下位ビットを明示的に0にするほか、たとえば32ビットレジスタの上位16ビットを16ビットレジスタとして使うなどでも得られる。

choppingのあと、有効桁の中でのLSBをセットすると、フォン・ノイマン丸めとなる。

プログラミング言語の丸め関数

同様にビット操作で実装されるものであるが、プログラミング言語関数などで丸めの機能が提供されている。FPUで実装されていることも多い。

通常は、丸め関数の丸め幅は1で、それ以外の丸め幅に対しては、丸め前に丸め幅で割り丸め後に丸め幅を掛ける、というのが一般的なレシピである。これは、割ったり掛けたりするのはプログラマの責任であり、処理系は「小数点以下の丸め」のみに責任を持つ、という明確な責任の分界点のあらわれである。第2引数以降で丸め幅を指定できる環境もある(が、次で述べるように問題がある)。

Ruby(やPHP)など一部の言語のライブラリでは、(十進で)小数点以下何桁目で丸める、ということを引数で指定できるものがあるが、仕様に問題がある。よく知られているように一般的な二進の浮動小数点表現では、例えばきっかり 0.1 という値は表現できない。ということは、たとえば 0.11 を小数点以下1桁に丸めた結果として 0.1 が欲しい、と要求しても、その 0.1 は内部的には「丸めた」結果とは本来は言えないものだからである。そのような計算に関する、いくつかのモデルの立て方は考えられるが[8]、いずれにしろ元々の要求のほうが無理としたほうが妥当である。

丸め関数が返す値は、小数点以下が全てゼロの値、という意味では整数だが、は引数と同様に浮動小数点型というものも多い。これは理論的な理由よりは実際上の理由で、以前は一般的な整数型であった32ビット固定長整数で表現できる整数の範囲よりも、一般的な浮動小数点型である倍精度浮動小数点型で正確に表現できる整数の範囲のほうが広いためである。

floor ceil trunc

多くの環境では、床関数(負の無限大へ)、天井関数(正の無限大へ)、切り落とし関数(0へ)が実装されている(床関数と天井関数)。それぞれの関数名には、次のようなものが使われる。

  • 床関数 - floor
  • 天井関数 - ceilceiling
  • 切り落とし関数 - trunctruncatefix

これらは、4つのIEEE丸めモードのうち3つに対応している。4つ目の偶数への丸めの実装率は、これらより劣る。IEEE丸めに含まれない無限大への丸めが実装されている環境は少ない。

例: ±3.7 を丸め幅1で丸める。

  • ceil(3.7) = 4, ceil(-3.7) = -3
  • floor(3.7) = 3, floor(-3.7) = -4
  • trunc(3.7) = 3, trunc(-3.7) = -3

round

最近接丸めは、多くの環境にroundという関数がある。しかし、どの最近接丸めかを定めている一般的となっている標準(デファクトスタンダード)は存在しないので注意が必要である。たいていは四捨五入か偶数への丸めであるが[9]、明示的に選択できないことも多い。

プログラミング言語round(0.5)round(-0.5)
C99
C++11

Ruby

1-1
.NET Framework
Python
00
Java10
JavaScript1-0

C言語における型変換と端数処理

浮動小数点型から整数型へのキャストなどによる型変換では、処理が単純な切り捨てになるものが多く、負の場合は実装による。

C言語modf関数は、実数を整数部と小数部に分割する。整数部は0への丸めである。

(以下(§a.b)のようにして示すセクションは JIS X 3010-1993(C89)のもの)

C言語およびそれと同じ仕様の言語では、キャストなどによる浮動小数点型から整数型への型変換においては、その値は小数部が捨てられる(§6.2.1.3)。よって「0への丸め」が行われる。

C89では、数学ライブラリ(§7.5)に床関数floorと天井関数ceilがあり(§7.5.6)、浮動小数点型において正方向への丸めと負方向への丸めが計算できる。

C99では、四捨五入関数roundをはじめとして、fegetround/fesetround(これはmath.hではなくfenv.h)による丸めモードの取得と設定など、大幅な強化が図られている。

なお、浮動小数点演算の性質上、たとえば (int)(0.6/0.2) は 3.0 ではなく 2.0 になる(なってもおかしくない)ので注意が必要である。これは浮動小数点表現では 0.6 や 0.2 を厳密に表現できないため、0.6/0.2 が、厳密には 2.9999999999999996 のような値になるためである。

テーブルメーカーのジレンマ

ウィリアム・カハンは端数処理の(あまり意識されていなかった)難しさを示し、「テーブルメーカーのジレンマ」[10]というフレーズを提案した。これは「#2回以上の丸めの禁止」の節で『「もしかしたら」の部分をはっきりさせなければ、正しい丸めができない』と説明した内容の「はっきりさせる」ために必要なコストについて(実は)「オーダーを見積もる」ことすら不可能だ、という話である。カハンが指摘した後には、具体的に著しく「悪い例」としてどういう値があるか、といったサーベイ[11]などが行われている。

その一例を示しながらカハン曰く、

そこにおいてオーバーフロー・アンダーフローをしないとき正しく丸められたy^wを全ての2つの浮動小数点数の引数に対して計算するのにどれだけのコストがかかるかだれも知らない。一方、reputableな数学ライブラリは初等超越関数を多くの場合わずかに1/2ulpを超えるのに収まりほとんど常に十分1ulpに収まるように計算する。なぜy^wはSQRTのように1/2ulpに収まるよう丸められないのだ? なぜならばどれだけの計算がかかるかだれも知らないからだ...。transcendental表現を計算し既定の桁数に正しく丸めるのにどれだけの余分な数字をcarryしなければならないかを予想する一般的な方法はない。ある有限の桁数が最終的に十分であるという(正しいとしても)事実すらも深い定理かもしれない。

この事実の帰結として、標準規格では以下のようになっている。IEEE754(1985年版)では、四則演算(加減乗除)、Fused Multiply-Add、平方根、剰余(浮動小数点剰余)について、「無限の精度で演算し、それを正しく丸めた結果」を要求し、また標準に沿っていると保証する実装はそれを保証しなければならない。一方で、より複雑な関数(演算)に対しては1985年版の仕様では同様な要求は示されず、それらに対しては典型的には「最終bitの範囲内(いわゆる「1ULP」)」の正しさは無い。2008年版ではいくつかの更新があった。

Gelfond–Schneider理論およびLindemann–Weierstrass理論を用いることにより、standardな初等関数の多くは非ゼロの有理数の引数を与えられた時transcendentalな結果を返すことを証明されている。それゆえそのような関数を正しく丸めることは常に可能である。しかし、どれくらい正確な結果を計算する必要があるかについて ある与えられた精度に対してリミットを決定すること、正しく丸められた結果が保証される前に、は多くの計算時間を要求するかもしれない。

いくつかのパッケージは正しい丸めを提供する。

  • GNU MPFRパッケージは正しく丸められた任意精度の結果を与える。

他のいくつかのパッケージは倍精度において正しい丸めの初等関数を実装している。

  • IBMのlibultim (最近接丸めのみ)
  • Sun Microsystemsのlibmcr (4つの丸めモードについて)
  • Arénaireチーム(LIP, ENS Lyon)によるCRlibm (4つの丸めモードをサポートし、それは証明されている。)

それについて丸められた値がどれだけの桁を計算してもdetarminedになりえないような計算可能な数が存在する。特定のインスタンスは与えられることはないがしかしこれは停止問題のundecidabilityからをfollowする。 例えば、もしゴールドバッハのconjectureが真でかつ証明不可能であれば、次の値を次の整数まで丸めた結果は決定できない。

10^−n ここでnは4より大きい2つの素数の和でないような最初の偶数か、あるいはもしそのような数が無ければ0

結果はもしそのような数が存在すれば1、存在しなければ0である。丸め前の値はしかしconjectureが証明不可能であっても与えられた任意の精度で近似できる。

建設事業における積算の例

建設事業における積算において、当該業務の金額を算出する際に取り扱われる端数処理については、各種作業行為(請負工事、委託業務…)によってそれぞれ規定や定めがあり[12]、それに従って端数処理が取り扱われる。

例として、「国土交通省土木工事積算基準」で第1編土木工事積算基準等通達資料の中の「土木工事積算要領及び基準の運用」に、「国土交通省土木工事標準積算基準書(共通編)」では第Ⅰ編総則第2章に[1](例[2])、「土木工事積算マニュアル」では第5編「土木工事積算基準の解説」1章一般事項にそれぞれ諸雑費及び端数処理の方法が記載されている[13]。たとえば土木請負工事における、一般管理費現場管理費のは全て、小数点以下第3位を四捨五入して2位止めにしているが、これは『国土交通省 土木工事標準積算基準書(共通編)』「P特−2−月−8」、「特−2−月−30」、「特−3−日−2」に記載された記述規定に基づく。

数量についても積算基準で定めがあり[14]、建築では「建築数量積算基準」で「積算の数量は、設計図書から読みとることのできる設計数量によることを原則とする」としている。したがって、所要数量、 計画数量を必要とする場合は、その旨明記することになっている。また、 所要数量で表示する必要のあるときには、その割増率についても規定している。

長さ計測の単位はmとし、小数点以下3位を四捨五入する。一般に設計図書の寸法は「mm」単位で記入されているが、 そのまま計算すると非常に細かい数値となる。積算上では長さの計測は「m」が単位であるから、端数が多いとそれだけ作業効率が悪いばかりか計算違いのもとにもなりやすい。このため「建築数量積算基準」など各種積算基準書では、 積算精度を勘案して小数点以下3位を四捨五入し、「cm」の位までとしている。

計算数値の端数についても小数点以下3位を四捨五入する。 電子データの場合は、入力時、計算途上で端数処理は行わなくてもよく、最後の内訳書に対応する数量で端数処理を行う。

また同一のものが数箇所ある場合の計算過程は、1箇所の長さ、面積、体積について四捨五入したのち、倍数を乗じる方法と、倍数を乗じた上で最後に四捨五入する方法と二通り考えられるが、前者は原則による計算とし、後者は便法による計算としている。多少の差はあるが、微細な誤差だけにほとんど問題はないので、いずれの方法によってもよいことになっている。

鉄筋の径、鉄骨材、木材の断面等は材料の規格を示すものであるので、この場合は上述の規定の適用外として、mmまで計測することとしている。また建築工事積算基準の第4編第2章第2節1通則および第5編第2種第2節6. (6).2)に示す通り、コンクリートの断面寸法も小数点以下3位まで計測し、木材の所要数量(体積)を求める場合もこの規定の適用外となっている。

設計図書の数量表示について、単位は言うまでもなく、長さm、面積m2、体積m3および質量tであり、表示される数量の端数については、小数点以下2位を四捨五入して小数点以下1位とする。ただし、100以上の数値については、四捨五入して整数とする、などがある。

単価表についても、川崎市の例などのように、有効数字に合わせた桁を、一次単価表では諸雑費をプラス計上、二次以下単価表では諸雑費をプラス計上せず切捨て、などの処置で端数を調整しているのが一般的である。

また、土木工事工事費積算要領及び基準の運用[3]にあるとおり、単価表では、歩掛表に諸雑費率があるものは単位数量当りの単価表の合計金額が、有効数字4桁になるように原則として所定の諸雑費率以内で端数を計上し、歩掛表に諸雑費率がなく、端数処理のみの場合は単位数量当りの単価表の合計金額が有効数字4桁になるように原則として端数を計上しており、単価表の各構成要素の数量×単価=金額は小数第2位までとして3位以下は切り捨てているが、内訳書では諸雑費は計上せず、内訳書の各構成要素の数量×単価=金額は1円までとし、1円未満は切り捨てている。

脚注・出典

  1. ^ a b c JISZ8401 2019.
  2. ^ a b 「"The Art of Computer Programming" D. E. Knuth (1997, § 4.2.2)」と、訳本「『The Art of Computer Programming Volume 2 Seminumerical algorithms Third Edition 日本語版』、Donald E.Knuth(著)、有澤誠(監訳)、和田英一(監訳)、斎藤博昭(訳)、長尾高弘(訳)、松井祥悟(訳)、松井孝雄(訳)、山内斉(訳)、アスキー、2004年、ISBN 978-4-7561-4543-7 p.224 §4.2.2 (2004年10月26日 初版発行)」との比較
  3. ^ C言語による数値計算入門―解法・アルゴリズム・プログラム (UNIX & Information Science) 皆本 晃弥 サイエンス社 初版第 5 刷発行 p.12 §1.5
  4. ^ 数値計算工学 森口 繁一 1989/4/26 第 1 刷発行 第6章 p.208
  5. ^ 「最近接偶数への丸め」、「偶数丸め」、「最近接丸め」、「JIS丸め」、「ISO丸め」、「銀行家の丸め」、「銀行丸め」、「五捨五入」、「偶捨奇入」という用語を採用している文献は、現在のところ発見できていない。詳細は、ノートを参照。
  6. ^ 負の数の場合も含めた明示的表現としては、そうなる。
  7. ^ 一般に関数の数値計算の場合、...000 のように 0 が続いていても、下の桁で上の桁からの桁借りが発生するかもしれない。また lexer によるリテラルの読込みの場合、浮動小数点数の表現として本来ありえない桁まで記述されている、XXX...XXX.5000000000000000000000001 といったような場合の下の桁の扱いをどうすべきか、といった点も問題になる(前述のようなちょうど境界だった場合、下の桁は必ずしも無意味とは言えないかもしれない)。
  8. ^ たとえば http://blog.practical-scheme.net/shiro/20131229-flonum-rounding を見よ。
  9. ^ 偶数への丸めが推奨されてはおり、徐々に標準となってゆくと思われる[要出典]。Microsoftの一部の環境など、仕様で明示しているものもある。しかし、C99もC++11もJavaもECMAScript(JavaScript)も異なるルールを仕様に定めている。
  10. ^ このフレーズに含まれる「テーブルメーカー」とは、「数表」を計算し、それを出版せんと企てる者、という意味である。数表は一般に、それに印刷されている桁数の範囲内は必ず正しいものでなければならないことが要求される(であろう)という背景がある。例えば、上限と下限の両方を計算することで結果がある範囲内に必ずあることを保証するといったような手法が、数表の正確さのために活用されてきた、という歴史がある。
  11. ^ http://perso.ens-lyon.fr/jean-michel.muller/Intro-to-TMD.htm
  12. ^ 通達例:積算における金額の端数処理について(お知らせ) 平成26年2月21日 大館市契約検査課 委託費の積算 長崎県 等
  13. ^ 平成30年10月版 土木工事標準積算基準書(改定・訂正)水道施設整備費国庫補助事業に係る補助金申請基準単価表における諸雑費及び端数処理について(お知らせ) (川崎市建設緑政局総務部技術監理課積算システム担当)等も参照。関係官庁、自治体や各種関連団体等も当該基準書に倣って基準書規定を行っている
  14. ^ 工事費積算における数値の取扱い(例) 国土交通省

参考文献

規格

関連項目


 

Back to Top
Close