Она несколько раз улучшалась, но так и осталась однопоточной?
Да.
Или её нельзя многопоточной сделать? Я уже и забыл детали поиска констант, но вроде помню что он рекурсивный, грубо говоря, они вычисляются одна за другой в одном запуске.
В принципе конечно можно, только там возникают вопросы с точностью потому что разные потоки вернут результатом числа (точнее даже вектора) с разной значностью и аккуратно их просуммировать тяжело. Либо придётся делать разбиение на потоки верхних уровней, а там может тупо не хватить итераций на все потоки и сделать аккуратно разбивку работы с полной загрузкой всех потоков опять таки тяжело. Насколько помню это была основная причина не делать многопоточную версию. Да и не сильно нужна вообще эта программа.
Сейчас пользуюсь hl1-vc-time.exe от 15 мая прошлого года.
hl1-vc-time2.exe существенно точнее:
Код:
>gp64 -q n19d252-test4.gp
v=[0, 210]
vC=[1412601623084347443619588493306179650000, 33845225974457624177996288218890240000000, 392594275663605899106904644657257721984750, 2937110655241059526978655281559124546945024, 15928744588945816244500876791400944026199540]
nn=[1, 104, 4131, 98804, 1608195]
>hl1-vc-time.exe 5 0 210
[1412601623084347443e21, 3384522597445762417e22, 3925942756636058993e23, 2937110655241059547e24, 1592874458894581759e25, 6673256111289947458e25]
>hl1-vc-time2.exe 5 0 210
[1412601623084347443e21, 3384522597445762418e22, 3925942756636058991e23, 2937110655241059527e24, 1592874458894581624e25, 6673256111289951608e25]
Как видите у -time2 верные все цифры кроме погрешности менее 1 в последней, в отличии от -time. Конечно погрешность мала у обоих, во всяком случае для малых загрязнений (кажется погрешность -time растёт как корень из количества вариантов в nn[]), но почему бы не пользоваться сразу более точной, скорости у них отличаются процентов на 5, да и то не очень в этом уверен.
Разве что крайнее правое число в показе прогресса порой слишком быстро меняется. Стало быть, вывод на экран может тормозить работу.
Может. И тормозит. Вопрос - насколько. Вывод происходит фиксированное количество раз (грубо - диаметр^3/8), потому замедление даже в несколько секунд существенно лишь для малых времён, менее минуты, а программа писалась для использования с гораздо более загрязнёнными паттернами, лёгкие можно и на PARI посчитать. И даже для лёгких паттернов, если время увеличивается пусть с 2.5с до 4.7с (как примерно и есть для диаметра 210 из примера выше), то считаю это допустимой платой за показ прогресса.
Кроме того, перенаправление вывода 2>nul работает гораздо быстрее вывода в консоль и позволяет ускорить работу почти до скорости без вывода.
Так что есть выбор, или показ прогресса с общим временем, или чуть быстрее.