Я написал функцию генерации простых чисел generatePrimes
(полный код здесь ), которая принимает входные данные bound::Int64
и возвращает Vector{Int64}
всех простых чисел до bound
. После определения функции у меня есть следующий код:
println("Generating primes...")
println("Last prime: ", generatePrimes(10^7)[end])
println("Primes generated.")
, который неожиданно печатает
Generating primes...
9999991
Primes generated.
Этот вывод пропускает сегмент "Last prime: "
второго оператора печати. Выход работает, как ожидалось, для небольших входов; любой ввод по крайней мере до 10 ^ 6, но почему-то не работает для 10 ^ 7. Я пробовал несколько обходных путей для этого (например, присвоение возвращаемого значения или преобразование его в строку перед его вызовом в операторе печати, объединение операторов печати и т.д.) и обнаружил еще одно странное поведение: если "Last prime",
удаляется из второго оператора печати для ввода 10^7
последнее простое число вообще не печатается, и все, что я получаю, это пустая строка между первым и третьим операторами печати. Эти проблемы, вероятно, связаны, и я не могу найти в Интернете ничего о том, почему некоторые операторы печати не работают в Julia.
Большое спасибо за любые разъяснения!
Изменить : Согласно предложению DNF, ниже приведены некоторые сокращения этой проблемы:
- Удаление первого и последнего операторов печати ничего не меняет - пустая строка всегда печатается в случае I описаны и каждый из приведенных ниже случаев.
println(generatePrimes(10^7)[end]) # output: empty line
Вызов функции и сохранение последнего индекса в переменной перед вызовом
println
тоже ничего не меняет; приведенные ниже случаи работают точно так же в любом случае.
lastPrime::Int = generatePrimes(10^7)[end]
println(lastPrime) # output: empty line
Если я вызываю функцию в любой форме непосредственно перед
println
, будет напечатана пустая строка независимо от того, что находится внутри
println
.
lastPrime::Int = generatePrimes(10^7)[end]
println("This doesn't print") # output: empty line
println("This does print") # output: This does print
Если я вызываю функцию (или распечатываю предварительно сгенерированный и сохраненный результат функции) внутри
println
, все, что до вызова функции (которое также находится внутри
println
), не печатается.
9999991
и все остальное может быть после вызова функции, только если есть что-то еще внутри
println
перед вызовом функции.
# Example 1
println(generatePrimes(10^7)[end]) # output: empty line
# Example 2
println("This first part doesn't print", generatePrimes(10^7)[end]) # output: 9999991
# Example 3
println("This first part doesn't print", generatePrimes(10^7)[end], " prints") # output: 9999991 prints
# Example 4
println(generatePrimes(10^7)[end], "prime doesn't print") # output: prime doesn't print
Я, вероятно, мог бы перечислить двадцать разных вариации того же самого, но это, вероятно, не проясняет ситуацию. В каждой отдельной версии этой проблемы, которую я видел до сих пор, проблема проявляется только в том случае, если где-то есть вызов этой функции; println
отлично печатает большие целые числа. Тем не менее, пожалуйста, дайте мне знать, если кому-то понадобится дополнительная информация. Большое спасибо!