いつもこのサイトにはお世話になっています。
32bitWindowsのC言語で、4G(4000000000)バイト以上の数の演算をしたく、
longint型に入れて計算してもマイナスになったりして
計算出来ないのですが、
何か良い方法は無いでしょうか。
文字列で扱って上位と下位に分けるしかないでしょうか。
よろしくお願いします。
巨大な数の計算
Re: 巨大な数の計算
64bit長の整数型を使用しても事足りませんか?
足りない場合は、多倍長演算用のライブラリの使用を考えてください。
足りない場合は、多倍長演算用のライブラリの使用を考えてください。
Re: 巨大な数の計算
度々すみません、
ご教示頂いた方法で計算した結果の数を元に、
そのサイズのファイルを生成しようとしたのですが、
fp = fopen("test.txt","a"); で開いて
fprintf(fp,"a"); で、くり返し書き込んだところ
4,427,037,730 バイト
まででそれ以上かかれなくなってしまいました。
これ以上のファイルサイズに書き込む方法はありませんでしょうか。
宜しくお願い致します。
ご教示頂いた方法で計算した結果の数を元に、
そのサイズのファイルを生成しようとしたのですが、
fp = fopen("test.txt","a"); で開いて
fprintf(fp,"a"); で、くり返し書き込んだところ
4,427,037,730 バイト
まででそれ以上かかれなくなってしまいました。
これ以上のファイルサイズに書き込む方法はありませんでしょうか。
宜しくお願い致します。
Re: 巨大な数の計算
フォーマットによって最大ファイルサイズが決まっているようです。
ぐぐってみた例
ttp://www.geocities.co.jp/SiliconValley-Oakla ... /file.html
OSの問題もあると思いますし、ファイルサイズの出力をどうしても1つのファイルにしなければいけないというのでなければ、ある程度で区切って別ファイルで保存されてはどうでしょうか。
ぐぐってみた例
ttp://www.geocities.co.jp/SiliconValley-Oakla ... /file.html
OSの問題もあると思いますし、ファイルサイズの出力をどうしても1つのファイルにしなければいけないというのでなければ、ある程度で区切って別ファイルで保存されてはどうでしょうか。
Re: 巨大な数の計算
動作未確認ですが、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で殴ればいい!(死亡フラグ)