以前、テキスト ファイルから大きな素数を取り出して別のファイルに入れるという質問をしました。2^32 の後の最初の素数までのすべての素数を取得することになっていましたが、何らかの理由でこのスクリプトが機能しなくなりました。
#!/bin/bash
n=4294967296
last=0
while read number
do
if [ $last -gt $n ]
then break
fi
echo $number
last=$number
done < primes.txt > primes2.txt
これらの 11 個の番号をループすることになりました。
4232004449
4232004479
4232004493
4232004509
4232004527
4232004533
4232004559
4232004589
4232004593
4232004613
004437
元のファイルには含まれていませんでした004437
。私のbashは数字を処理します8999999999999999999
なぜこれが起こったのか、誰にも手がかりがありますか?
64 ビット Ubuntu 10.04、16 GB RAM、8 コア @ 3.60 GHz
GNU bash、バージョン 4.1.5(1)-リリース (x86_64-pc-linux-gnu)
アップデート:
jfgagne が提供する「修正された」bash をダウンロードしてコンパイルし、bash スクリプトでリンクすると、まったく同じ場所でエラーが発生しました。元の主要な質問に相当する非常に高速な perl を使用して、ls -al からいくつかのファイル サイズを取得しました。
11 next_prime (just to make sure this was counting bytes accurately)
2147483659 primes2.txt
2147483670 one_too_many
2147483659 = 2^31 + 11
次の素数 ( 4232004631
) のサイズは 11 バイトです。これは までのすべての素数を保持します4232004613
。004437
また、このエラー ループの下部にある素数の終わりから が来ていることにも気付きました ( 4232004437
)。何かが前進しようとしているようですが、行き詰まっています。