• ベストアンサー

エクセルの計算

エクセルで計算するときに、 Mod(84,3) で計算すると正しく0を返してくれるのですが、 Mod(Combin(9,3),3)で計算すると3と間違った値を返してきます。 何故でしょうか。

noname#184996
noname#184996

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

  • ベストアンサー
回答No.2

本当ですね。ちょっと驚き。 動きとしては 84 よりほんのわずか小さな値を ComBinが返しているみたいですね。 83.99999999999999999999999 というかんじ。 これの 3 の剰余は Excel の Mod の仕様では 2.999999999999999999999999999 なので、 3 と表示するのだと思われます。 Mod(Round(Combin(9,3),0),3) なら大丈夫でした。 ただ、Combin(9,3) = 84 は True を返します。 ひょっとすると表示と同程度に丸めてから比較しているのかも。 バグっぽいですが、整数と浮動小数の区別のないExcelで 整数を扱うのは要注意みたいですね。

その他の回答 (4)

回答No.5

せっかく数学カテなので、誤差が入りにくい計算法を調べてみました。 私の知っていたのは、2項展開してゆく方法ですが、よく調べてみたら こんなシンプルな方法がありました。 例えば 7C3 = (5x6x7)/(1x2x3) ですが、分母と分子を別々に計算するのは これぐらいなら簡単ですが、mCn の m, n が大きくなってくると、分母と分子が 巨大化して困難です。 でも 5÷1×6÷2×7÷3 という順番で計算すれば、計算の途中結果があまり大きくならず、誤差が入りません。 つまり分子と分母の各数を小さい順に交互に掛けて割ればよいだけです。このとき 割り算は常に割り切れます。 なぜ、割り算が常に割り切れるかの証明は、数学のよい練習問題だと思います(^^;

回答No.4

>コンピュータが2進法であるかぎり避けられません。 いえ、この件に関してはさけられます。IEEE754形式では不動小数点でも誤差なしで非常に大きな整数が保持可能ですし(2^53まで)、入力に整数と仮定し、結果が整数を正確に表せる上限を越えない範囲で、combinationを誤差が入らないように実装することは可能です。 MSさんは実装をちょっとさぼったようですね。

  • sporespore
  • ベストアンサー率30% (430/1408)
回答No.3

EXCELがデータをメモリに入れるときは2進法で入れます、これを2進法で計算して元に戻すときにごくわずかなエラーが出てこれが今回の不思議な現象を起こします。知られている問題ですが、コンピュータが2進法である限り避けられません。 答えが3みたいですが、小数点以下を表示すると2.9999999999999となっていることが分かりますでしょうか。つまり、Modの中のCombin(9,3)が正しく整数を内部で認識していないということです。従ってCombin(9,3)が整数と指定すればいいのでMod(Int(Combin(9,3)),3)とすれば正しい答えになります。 この、Excelのエラーについては簡単に見ることができます。 A1に5000.1と入力、A2に-4999.82と入力、A3に-0.28と入力し、A4に=Sum(A1:A3)として、小数点以下の桁数を30桁位見える様にしてみてください。すべてゼロではなくてはならないのに数字が見えますよね。これが今回のエラーの原因です。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

私のエクセル(2010)では"=MOD(COMBIN(9,3),3)"は3になりますけど…。

関連するQ&A

  • excelで重複組合せの計算

    重複組合わせの計算: 製品の種類(n) 443           製品の種類(n) 212 出荷数(r) 3530           出荷数(r) 1646 n+r-1 3972           n+r-1 1857 重複組合せn+r-1Cr #NUM!     重複組合せn+r-1Cr 9.5806E+283          ”=COMBIN(B4,B3)      ”=COMBIN(E4,E3) 以上、同じexcelのCOMBIN関数で計算しましたが、一つは普通に計算できましたが、なんでか一つは#NUM!を返してきました。値が大きすぎのせいですか?どんな方法で解決できるのでしょうか?

  • MOD25(25を法とする剰余)の計算

    エクセルでMOD25(25を法とする剰余)の計算をします。 (記号)3∧nで3のn乗をあらわすものとする。 (したいこと)mod(3、25),3∧2=9、3∧3=27、―――、3∧20、―――、3∧24に対して、 mod(3、25)~mod(3∧24、25)までの値を求めたいのですが、~mod(3∧20、25)以降の値がおおきすぎてエラーとなります。どうすればいいのでしょうか。

  • エクセルの計算式なのですが

    エクセルの計算式なのですが A=BC^D の式で、 Bの値を求めたいのです。 A,C,Dの値は数値は出ているのですが、エクセルの計算式をどう組むとBの値を出せるのか計算式がわかりません。 どなたか計算式を教えて頂けないでしょうか?

  • mod255の計算

    こんにちは。 今日はmod255の計算について困ったことがあり、質問しました。 私は今、mod255の計算をする回路を作っています。 mod255とはある値を255で割ったときの余りを求めることですよね。 しかし、回路ではあまり除算(回路の性質上、逆数を取って乗算する)を使いません。 理由は、計算に時間がかかることと、回路規模がが大きくなるため。 ある値が255以上か判定してから順次255を引くことも考えましたが、動作が不規則なため使っていません。 そこで、私はmod255を除算を使わず、減算で実現しようと次のような計算法を考えました。 例、239+157をmod255する場合。 239+157=396を2進数に変換すると 11101111 +10011101 ------------ 110001100 ここで、計算結果の右から9番目の1を一番右に移動して加算すると 10001101になります。 これを10進に変換すると141になります。 よって、396-255=141となり396をmod255ができていますよね。 これで、問題解決だと思ったのですが、 ある値が511でこの計算をすると結果が10000000となり 256になってしまいます。 このことから考えて、この計算法は万能ではないみたいです。 この計算法のどこを改善するとmod255を計算できるようになるのでしょうか? また、皆さんなら、どんな方法でmod255を実現しますか? よろしく、お願いします。

  • エクセルの計算式で困ってます。。

    エクセルの計算式で教えて下さい。 エクセルの表の列に計算式いれて、 =A1÷X =A2÷X =A3÷X・・・といった感じで、Xの値をあるセルの値で固定して、計算したいのですが、固定する場合、どのように入れればいいのでしょうか?教えて下さい。。

  • エクセルの計算式について

    エクセルの本を引っ張ってきて探して見たんですが、やり方が解らず降参です。どなたか教えてください。 エクセルでシート1、シート2、シート3のそれぞれのある値の合計をシート4に計算したい場合の計算式はどうやってやるのでしょうか? よろしくお願い致します。

  • エクセル計算について。

    エクセルで計算をしています。10.2 1.3 1.4 0.0などの計算です。サムで計算をすると、合ってる列もあるのですが、答えが多少ずれて計算される列もあります。小数点は切り捨てています。どうすればきちんとした値が求められるでしょうか?

  • Excelで計算式が正しく入らないのですが。

    Excelで計算式の入ったセルをコピーし別のセルに貼り付けると、計算式ではなくもとのセルの値が張り付きます。数式バーには計算式が入っているのですが・・・また、数式バーの最後にカーセルを合わせ、Enterを押すと正しい値に変わります。

  • エクセルでの計算式

    エクセルで隣のセルに値が入っていたら、『1』と表示させる計算式を教えていただけませんでしょうか? お願いします。

  • Excel 2002 COMBIN関数とGCD関数の組み合わせでおかしな値になる

    Excel 2002を使用しています。 COMBIN関数(組み合わせ)とGCD関数(最大公約数)を組み合わせてつかうと、時々異常な値が表示されて困っています。 いつもではないところがとくに困りものです。 例1: GCD(COMBIN(17,9),COMBIN(15,7)) 例1のとおりにセルに入力すると2と表示されます。(本来は715が表示されるはず) こればGDC関数の中のCOMBIN関数を他のセルに入れ、そこを参照するようにしてもかわりません。 例2:GDC(24310,6435) 例2のように入力すると715が表示されるのでCOMBINが異常なのかもしれませんが、COMBIN(17,9) と COMBIN(15,7) をそれぞれ単独で表示させると ちゃんと 24310 と 6435 が 表示されます。 この現象(バグ?)をどうにか回避する方法をご存知のかたはいらっしゃるでしょうか? 他のバージョンのExcelでもそうなるのかどうかは確認できていません。