• ベストアンサー

Excelのmod関数の戻り値

ExcelでMod関数を使用している最中に、割り切れる数値でも割る数値と同じ数値が返されます。例えば、「=mod(2.6,1.3)」では、「0」が返りますが「=mod(3.9,1.3)」だと「1.3」が返ってきます。これはどういうことなのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • staratras
  • ベストアンサー率41% (1498/3648)
回答No.2

Execelのバージョンによっても、結果が違うようです。 手持ちのパソコンでExcel2003とExcel2013について、mod(1.3,1.3)からmod(13,1.3)まで被除数を1.3刻みで(商が1から10まで)調べてみたところ、正しく0と表示されたのは、どちらも商が1を含む2のべき乗(1,2,4,8)となる場合だけでした。 それ以外の場合、Excel2003では、-2.22045-E16(商が3と5の場合)、-4.44089-E16(商が6と10の場合)、-6.66134-E16(商が7の場合)、-1.11022-E15(商が9の場合)と表示されました。 一方Excel2013では、商が1.2.4.8以外のすべての場合には、ご質問のように1.3が表示されました。 余りと除数が同一ということでおかしいと気付くべきかもしれませんが、Excel2013のように「一見もっともらしい数値」を返されるよりも、昔のExcel2003のように明らかにコンピューター内部の計算誤差を示唆する数値を返してもらった方が、個人的にはありがたいと思います。 なおLinux系OSで使用している別の表計算ソフト「LibreOffice Calc(バージョン4.0.2.2)」ではすべて正しく0と表示されました。

sh2361
質問者

お礼

staratrasさんへ  早速の返答有難うございました。

その他の回答 (1)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

コンピュータ(Excel)の内部では、小数は浮動小数点を持つ数値として扱われます。 2進数の小数なんかで表せるような数値はおおむね正確な値で保持されますが、 (1/2=0.5、3/4=0.75、5/32=0.15625とか) 1.3とかって数値は、コンピュータの内部では正確な値として保持されないです。 その結果、 Excel で浮動小数点演算の結果が正しくない場合がある http://support.microsoft.com/kb/78113/ja の記事にあるような計算誤差が出るって事になります。 10進数の計算だと、 1/3=0.333333333333333… 1/3×3=0.999999999999999… になるみたいな。

sh2361
質問者

お礼

neKo_deuxさん 早速の返答有難うございました。

関連するQ&A