• ベストアンサー

大きな数、大きな演算精度の実数をあつかえるクラス

1000桁くらいの大きな整数とか、有効数字1000桁くらいの実数の演算が可能なクラスを探しています。十進BASICならできると聞いたので、ダウンロードして試してみてできることは確認しましたが、BASICは20数年ぶりなので、ほとんど忘れています。CかC++で同じような精度の演算ができるライブラリはないでしょうか?

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >クラスを探しています。  ↑  Vectorさんで探せば見つかります。  例えば  http://www.vector.co.jp/soft/dos/prog/se114670.html→『「アセンブラを使わないC++による多倍長計算」ライブラリのソースファイル』  http://www.vector.co.jp/soft/dos/prog/se016365.html→『C言語用の多倍長演算サブルーチンライブラリ』  http://www.vector.co.jp/soft/win95/util/se311121.html→『RSA暗号テストと多倍長演算テストができる!!』  とか。

参考URL:
http://search.vector.co.jp/search?query=%91%BD%94%7B%92%B7
moritan2
質問者

お礼

ご回答ありがとうございました。 ソ-スがあるのでたいへんたすかりました。 お礼が遅くなってもうしわけありませんでした。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

すぐに思い付くのは GMP.

moritan2
質問者

お礼

ご回答ありがとうございました。 お礼が遅くなってもうしわけありませんでした。

関連するQ&A

  • Accessクエリの整数型と単精度型の演算について

    Accessのクエリで長整数型と単精度浮動小数点型を 加算すると答えが一致しません。理由を知っている人いますか? ちなみに長整数型と倍精度浮動小数点型を加算したときは答えが一致します。 浮動小数点は誤差がつきものなのは分かりますが、 確か単精度浮動小数点型は有効桁数7桁までのはず。 下記の例では問題ないように見えます。 (例)長整数型と単精度浮動小数型の演算:1000+0.20=1000.20000000298 長整数型と倍精度浮動小数型の演算:1000+0.20=1000.2 それではよろしくお願いします。

  • linux RedHatでC言語

    整数、単精度(float)、倍精度(double)の変数変換、各種書式付出力について教えてください。 また、よろしければ、40桁の整数、有効数字20桁の実数、小数点以下15桁の実数を表示する方法について教えてください。 本当にC言語の初歩だとは思いますが教えてください。

  • ビット演算で00000001と1の頭に0を付ける?

    https://www.grapecity.com/japan/powernews/column/clang/019/page02.htm ビット演算子 表1にCのビット演算子を掲げておきます。ビット演算とは言っても、扱う値はバイト単位などCの一般的な整数のデータ型です。ビット演算子は、それらの値をビット単位で計算します。 ビットシフト演算(<< >>)~2倍と1/2 例えばunsigned char型の1は、2進数では"00000001"という形のビット列(ビットパターン)になります。これを1桁左にずらす(シフトする)と"00000010"となります。ずらしてあふれた左端の0は消え、空いた右端には0が入ります。 "00000001"は10進数の「1」、"00000010"は10進数の「2」です。つまり、ビット列を左に1桁シフトすると値は2倍になるのです。 -----------------------------------------  以上ですが、C言語の、ビット演算の解説の抜粋です。ビット演算はまだ覚えたてですが、"00000001"整数1の頭にわざわざ、0を沢山 つける目的は何なのでしょうか!?  よろしくお願いします。

  • 最大50桁の実数の和・差・積を求めたい

    C++で、2つの最大50桁の実数を入力して、その和・差・積を求めるプログラムを作りたいのです。 実数をchar型に入力させて、それを1桁ずつint型に変換したいのですが、どのようにやればよいのでしょうか? また、その際、符号や小数点はどうすればよいのでしょうか? 計算の流れとしては、 ○足し算 小数点を合わせる ⇒下位の桁から1桁ずつ足し算していく ⇒結果が10以上の場合、10を引き、左隣の桁の数字に1を加える ○引き算 小数点を合わせる ⇒下位の桁から1桁ずつ引き算していく ⇒引かれる数字のほうが引く数字より小さい場合、引かれる数字に10を足し、左隣の桁の引かれる数字から1を引く というような感じで考えているのですが、小数点の合わせ方がわかりません。 また、掛け算に関しては、筆算の要領でやろうと思うのですが、どのようにやればよいのでしょうか? 私はC++の勉強歴が短いので、できれば初心者向けのわかりやすい説明でお願いします。

  • JAVAのプログラミングです

    JAVAのプログラミングを教えてください 整数Xの十進表記を1桁右に循環的にシフトした(つまり、最右桁の数字を最左桁の位置に置く)数が、Xの2倍であるような整数Xのうち、最小のものを求めよ。 これをJAVAでプログラミングせよ。とのことです

    • ベストアンサー
    • Java
  • C++でのdouble型データの精度

    こんにちは。 コンパイラは、Borland C++ Compiler 5.5 を使っています。 表題の「精度」とは、 正確な値が保証される、「整数部分の桁数」+「小数点以下の桁数」 の事です。 普通、double型データの「精度」は、16桁であると認識しています。 そのため、例えば、 a=123456789012345.6 という浮動小数点数は16桁なので、正しい値が保証されるはずです。 ところが、printf("%f", d1); のようにprintf関数で表示すると、 123456789012345.593800 と表示されました。 これは、d1が正しい値を保持できていないという事です そこで、桁数を下げていった所、 a=1234567890.1 つまり、精度は11桁しかないという事になります。 何か僕が勘違いしているのでしょうか? それとも、僕が使っているコンパイラの精度が11桁しかないという事なのでしょうか? 何かお分かりの方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • C#のジェネリッククラス

     現在C#で座標クラス(XY座標を計算するクラス)を作ろうとしています. 座標クラスに用いるデータは二つの数字になる訳ですが,データの型に汎用性を持たせたいです.以前C++で作る場合は,テンプレートクラスを用いてすんなりとOKだったのですが,C#では勝手が違うようで少し困っています. //座標クラス class vertex<T>{ private T x, y; ~ } のような感じでクラスを作っていきたいのですが,このままだとC#の場合「x + y」や「x < y」のような基本的な演算子が使えなくなってしまいます.もちろん演算子を使わなくても同じような事が出来たらいいのですが...  一応自分で調べた結果,TにIComparableを実装の制限を加えれば比較は出来る事が分かりました.しかし,加算や減算を行うようにするのはどうすればいいのかまだ良く分かっていません.  x.Add(y)の様な形でも良いので,演算を可能にするようなジェネリクスクラス(メソッド)の作り方は無いでしょうか?もちろん演算子が使えるならなお嬉しいです(今まで調べた結果では難しそうに感じてますが...><).  また,Tの型を値のみに制限する方法は無いでしょうか?doubleやintやlongのみに制限したいのです.「where T : struct」はなんとなく意味が違うような...?あまりそこの所はまだよく理解はしていません.Javaだと「Numberクラスを継承しているクラス」とすれば簡単に制限できたのですが...C#はまだ初心者であまりよく理解できていないのが現状です>< よろしくお願いします. 一応参考までに... 【O S】Mac OS 10.7(最終的にはWindowsに実装予定) 【プログラミング歴】7年(C++ 3年, Java 4年, C# 6ヶ月)

  • int型とfloat型の演算結果

    C初心者です。 int型とfloat型で割り算をして処理を表示させてます。 以下、実処理の一部です。 int a; int b; a = 3; b = 2; (1) printf("答え=%d:1のはず\n",a/b); (2) printf("答え=%d:1のはず\n",a/(float)b); (3) printf("答え=%d:1のはず\n",(float)a/b); (4) printf("答え=%d:1のはず\n",(float)a/(float)b); 私の予想では(1)~(4)まですべて1が表示されると思っていました。 実際は(1)のみ1で(2)~(4)は0でした。 (2)~(4)はなぜ0と表示されるのですか? ・整数型と実数型で演算した場合、実数型に合わせられてること ・表示が整数型であること なので1が表示されると予想したのですが・・・。

  • 3桁の整数の表し方と証明

    各位の数字が全て異なり各位とも0でない3桁の整数がある。この整数の各位の数字を入れ替えて出来る全ての整数ともとの整数を加えると222の倍数になることを証明せよ。という問題ですが、、 もとの3桁整数を表すのに100a+10b+cと考えました。 各位を入れ換えた整数を例えば100b+10c+aとすると加えると101a+110b+11cとなります。これが222の倍数となると証明できないし、、。最初の3桁の整数の表し方が違うんですかね、、。すいません、教えて下さい。

  • 対角線論法(?)について

    オートマトン言語理論計算論I(サイエンス社)という本の第7、8ページに すべての無限集合が等しい濃度を持つわけではない例として、 「整数全体の集合と実数全体の集合について考えてみよう。仮に、実数の 全体が正整数と1対1に対応づけられたとする。そのとき、各 i=1,2,3,… について小数点以下 i 桁目が、第 i 番目の実数(上の対応で正整数 i に 対応づけられた実数)の小数点以下 i 桁目の数字に法10のもとで5を加え た数であるような実数を考える。するとこれは上で正整数と対応づけられた どの実数とも異なる数である。このことから、実数全体と正整数を1対1に 対応づけることがそもそも不可能だったことがわかる。」 とあり、この議論が対角線論法と呼ばれるそうですが、何度読んでもさっぱ り理解できないのです。 特に 「そのとき、各 i=1,2,3,…について小数点以下 i 桁目が、第 i 番目の実数 (上の対応で正整数 i に対応づけられた実数)の小数点以下 i 桁目の数字に 法10のもとで5を加えた数であるような実数を考える」 がイメージできないのです。 もし対角線論法について理解されてる方がいらっしゃいましたら、是非とも ご教授願いませんでしょうか? よろしくお願いします。

専門家に質問してみよう