Предел числа Баша?
я попросилвопрос ранее это включало извлечение больших чисел из текстового файла и помещение их в другой файл. Он должен был захватить каждое простое число вплоть до первого простого после 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 ГБ ОЗУ, 8 ядер с частотой 3,60 ГГц
GNU bash, версия 4.1.5 (1) -релиз (x86_64-pc-linux-gnu)
Обновить:
После загрузки и компиляции «фиксированного» bash, предоставленного jfgagne, и ссылки на него в моем 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
). Кажется, что-то пытается продвинуться, но застрял.