巨大な数の計算

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

巨大な数の計算

#1

投稿記事 by 初心者 » 8年前

いつもこのサイトにはお世話になっています。

32bitWindowsのC言語で、4G(4000000000)バイト以上の数の演算をしたく、
longint型に入れて計算してもマイナスになったりして
計算出来ないのですが、
何か良い方法は無いでしょうか。

文字列で扱って上位と下位に分けるしかないでしょうか。
よろしくお願いします。

Poco
記事: 161
登録日時: 8年前

Re: 巨大な数の計算

#2

投稿記事 by Poco » 8年前

64bit長の整数型を使用しても事足りませんか?
足りない場合は、多倍長演算用のライブラリの使用を考えてください。

maru
記事: 150
登録日時: 8年前

Re: 巨大な数の計算

#3

投稿記事 by maru » 8年前

long intは32ビットです。
long long や __int64 を使ってみてください。

初心者

Re: 巨大な数の計算

#4

投稿記事 by 初心者 » 8年前

ありがとうございます。

__int64でいけそうです。

助かりました!!!!!!!

初心者

Re: 巨大な数の計算

#5

投稿記事 by 初心者 » 8年前

度々すみません、
ご教示頂いた方法で計算した結果の数を元に、
そのサイズのファイルを生成しようとしたのですが、

fp = fopen("test.txt","a"); で開いて
fprintf(fp,"a"); で、くり返し書き込んだところ

4,427,037,730 バイト

まででそれ以上かかれなくなってしまいました。

これ以上のファイルサイズに書き込む方法はありませんでしょうか。

宜しくお願い致します。

七篠
記事: 8
登録日時: 8年前

Re: 巨大な数の計算

#6

投稿記事 by 七篠 » 8年前

フォーマットによって最大ファイルサイズが決まっているようです。
ぐぐってみた例
ttp://www.geocities.co.jp/SiliconValley-Oakla ... /file.html

OSの問題もあると思いますし、ファイルサイズの出力をどうしても1つのファイルにしなければいけないというのでなければ、ある程度で区切って別ファイルで保存されてはどうでしょうか。

アバター
みけCAT
記事: 6186
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 巨大な数の計算

#7

投稿記事 by みけCAT » 8年前

動作未確認ですが、Windows APIを使ってみてはいかがでしょうか?

コード:

#include <stdio.h>
#include <windows.h>

int main(void) {
	unsigned long long i;
	HANDLE fp;
	char towrite[10];
	DWORD written;
	DWORD writesize;
	fp=CreateFile("test.txt",GENERIC_WRITE,0,NULL,
		CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
	if(fp==INVALID_HANDLE_VALUE) {
		printf("File open error.\n");
		return 1;
	}
	lstrcpy(towrite,"a");
	writesize=lstrlen(towrite);
	for(i=0;i<10000000000ULL;i++) {
		if(!WriteFile(fp,towrite,writesize,&written,NULL)) {
			printf("File Write Error at %llu.\n",i);
			CloseHandle(fp);
			return 1;
		}
		if(writesize!=written) {
			printf("File Write Size Not Correct at %llu.\n",i);
			CloseHandle(fp);
			return 1;
		}
	}
	CloseHandle(fp);
	printf("ok\n");
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る