• ベストアンサー

多桁計算

Fookyの回答

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

そういうライブラリがあればいいんですが、 私も知りません。 要は筆算の手順をプログラムに実装すればいいんじゃ ないでしょうか。 たとえば、多桁×多桁の計算を筆算風にやってみます。 手元の環境では、unsigned shortが0~65535、unsigned intがその2乗の桁を持ってるんで、unsigned shortの 配列s[KETA]、t[KETA]、r[KETA]を使って、(KETA:定数) s[0]、t[0]、r[0]には千の位まで、s[1]等には千万の位まで 入ってる、という風に多桁の十進数を表現すると、 [初期値] unsigned int carry = 0, i = 0, j = 0; [ステップ1] unsigned int result = (unsigned int)s[i] * (unsigned int)t[j] + carry; [ステップ2] r[i+j] += (unsigned short)(result % 10000); carry = r[i+j] / 10000; [ステップ3] if( s[++i] > 0 )   ステップ1へ else if( t[++j] > 0 )   if( carry > 0 )     r[i+j-1] += carry;   carry = i = 0;   ステップ1へ else   ステップ4へ [ステップ4] rの要素を添え字の大きいものから順に横に並べて表示 多分どこか間違えてますが、こんな感じで多桁×多桁の 掛け算はできませんかね。217!に必要なのは多桁×少桁(?) ですが、そっちはもう少しシンプルですね。 ところで、217!の厳密解が欲しいという状況が理解できないんですが…。 そんなものを眺めて何か分かるんでしょうか?整数論の最先端では そういうことをやってるんでしょうか?暗号理論? さもなくば浮動小数点で十分なんでは?

関連するQ&A

  • C言語でπを2万桁まで計算するには

    C言語でπの値を2万桁まで(2万という数字に特に意味はないですが大きい桁)をマーチンの公式を用いて計算したいのです。 マーチンの公式によるπの求め方は 16×アークタンジェント(1/5) - 4×アークタンジェント(1/239) ということは分かったのですが double型の変数を使っても扱える桁数はたかがしれているので どのようにすればアークタンジェント(1/5)などの値を C言語のプログラムで大きい桁まで求めることができるのでしょうか。 また何かうまい具合に計算できるアルゴリズムなどがありましたら 教えてください。 詳しい方いましたら、よろしくお願いします。 もしよければ参考プログラムなども 貼り付けていただけたら幸いです。

  • 20桁まで計算したいのですが

    20桁まで計算したいのですがなにか良いソフトありませんか? ポケットコンピューターは10桁のBCD計算ができましたが 20桁まで計算できるものがでました。 Mathematicaのようなものは桁数を多く計算できるようなことをサイエンスカフェで 聞いたことがあります。 十進BASICでは16桁までですが20桁まで計算したいです。 何か良いソフトありませんか?できればフリーソフトが良いのですが・・・。

  • 100桁の計算ができなくて困っています

    100桁の整数を2つ入力して和と積を求めたいのですが、プログラムが正常に動きません。 C言語を学び初めて数ヶ月しかたっていないので、力不足ということもありますが・・・ よろしくお願いします。

  • パソコンで階乗を計算

    現在、fortran90を使って階乗を計算するプログラムを作っております。 プログラム内容は、(n !を求めえるプログラム) n=0 do i=1,100 n=n*i enddo このプログラムを実行すると、12!までは予想された値が得られるのですが、13!以降は電卓で計算した値と遙かに異なる値が得られました。 このプログラムは間違っているとは思えないですが、電卓の計算とパソコンの計算が異なる結果になった理由が分かりません。 どなたか、ヒントや参考情報だけでもいいので教えてください。 ちなみにパソコンによる計算結果は、 i n 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 13 1932053504 14 1278945280 15 2004310016 16 2004189184 17 -288522240 18 -898433024 19 109641728 20 -2102132736 21 -1195114496 22 -522715136 23 862453760 24 -775946240 25 2076180480 26 -1853882368 27 1484783616 28 -1375731712 29 -1241513984 30 1409286144 31 738197504 32 -2147483648 33 -2147483648 34 0 35 0 36 0 36の階乗以降0です。 計算結果が正となるが、結果が違うモノ(例えば、13!や31!)は単精度で約10桁程度しか有効数字が得られないためであると思われるのですが、負になったり、0になる理由が分かりません。

  • 13桁以上の計算機とか売ってますか?

    12桁表示の計算機は普通に売ってますが、13・14桁以上の計算機とか売ってますか? 売ってるよ!っていう方、どうか教えてください。 宜しくお願い致します。

  • 2桁×2桁を早く計算する方法

    2桁×2桁を早く計算する方法を紹介してください。

  • 有効数字3桁を導く計算するときは4桁で←本当?

    有効数字3桁の答えを求める計算するときは4桁で←これは本当? 大学受験で使う化学の参考書に、 「乗除算で有効数字3桁の答えを導くとき、有効数字4桁で計算を進めていき、計算結果の4桁目を四捨五入する」 なることが書かれていました。 この通りで言うと例えば 3桁×5桁×6桁 の式を変形して 3桁×4桁×4桁 としても最終的には答えは同じになるのですよね。 なんだか信じられないです。 数学的に誤差は出ないと証明できるのでしょうか? この計算法が使えるときと使えないとき等もあれば教えていただきたいです。m(_)m

  • 1問、間違っていたら、1ケタへ 合っていたら2ケタ

    エクセルVBAを使い、計算プログラムを作りたいのですが、上手くいきません。 5問の問題があり、1問が間違っていたら、乱数を使い1ケタへ。合っていたら2ケタへ。 乱数を使い、If文で1ケタは表示することは出来ますが、合っていたら2ケタに表示するというIf文かswitch文での処理が分かりません。 ヒントでも構いません。 だれか分かる方がいましたら、教えて頂けますでしょうか? 宜しくお願いします。

  • 計算させるのに便利なプログラム言語

    エクセルだと1000桁の計算を表示させる事ができません そこでプログラムでエクセルみたいに計算させれば 計算できるかもしれないと思ったのですが これはこれで無理なんですかね。。 たとえば 7000C0から7000C7000までを(C=コンビネーション) 自動で計算させるのに最適な方法はなんなのでしょうか。 エクセルだと7000C200辺りで#NUM!で計算できなく なってしまいます。 今やろうとしていることは、計算の桁も1000桁以上になり、 計算回数は1億くらいになってしまいます これを行うために、計算に強いプログラム言語はあるのでしょうか。

  • 計算の便利なプログラム言語

    エクセルだと1000桁の計算を表示させる事ができません そこでプログラムでエクセルみたいに計算させれば 計算できるかもしれないと思ったのですが これはこれで無理なんですかね。。 たとえば 7000C0から7000C7000までを(C=コンビネーション) 自動で計算させるのに最適な方法はなんなのでしょうか。 エクセルだと7000C200辺りで#NUM!で計算できなく なってしまいます。 今やろうとしていることは、計算の桁も1000桁以上になり、 計算回数は1億くらいになってしまいます これを行うために、計算に強いプログラム言語はあるのでしょうか。