Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
mayton, зафиксировал синхронного этатосфена. Учел все пожелания по оформлению. Можешь посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 10:14 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Отлично. Только нам нам надо придумать как это собирать в консоли. Я делаю *.cmd файлы под MinGW (Win_x64). Но честно говоря выглядят они позорно. И я их не коммичу. Хотелось-бы скриптовать сборку приличнее. Я пользовался сборщиками в основном под java (ant,maven,gradle) и слабо знаком с тем какие есть для С/C++. Возможно Илья нас проконсультирует по этому вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 11:03 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonОтлично. Только нам нам надо придумать как это собирать в консоли. Я делаю *.cmd файлы под MinGW (Win_x64). Я тоже не большой спец в этом вопросе. Сделал проект в MSVC Express, там пишу, запускаю, отлаживаю. В линуксе: gcc eratosfentest.cpp -O2 -oerat много накопится, можно make общий сделать. Если ввести требование: один exe из одного cpp то компиляция резко упростится. т.е. все пишем в .h, цепляем нужные в один cpp, его компилируем. Проект небольшой, думаю этого достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 11:37 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
BarloneDima T, еще раз на 2 то зачем умножать? http://primes.utm.edu/glossary/page.php?sort=WheelFactorization ага, оно самое авторNotice that the simple wheel based on 2 and 3 removed 4/6 = 2/3 rds of the composites. The larger wheel using 2, 3, 5, and 7 will remove 162/210 (over 77%) of the composites. Large wheels are not particularly efficient. To remove 90% of the composites, we must use the primes up to 251. 95% requires the primes to 75,037. 96% requires the primes to 1,246,379. 97% requires the primes to 134,253,593! Just imagine how many primes you will need to remove 99% of the composites! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 11:53 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Хотел затестить вместо %6 maytonПо поводу Уоррена я немного ошибся. Старик писал про оптимизацию целочисленного деления. Вот из моих сорцов. К сожалению делители только до 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Врет чудоформула OPTDIV_6(2069) = 345 2069/6 = 344,8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 12:51 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Напутал немного с расчетами шагов. Если кратные 2м и 3м выкинуть, то перебор 33% а не 25%. Зафиксировал. Количество итераций на миллиарде уменьшилось с 1524 млн. до 1191. Правда пропорционально быстрее не стало. Итераций меньше на 22%, время на 7%. Думаю из-за %6. Надо затестить пропуски (2,3,5) Результатыtest eratosfen2() from 1 to 1000M eratosfen2() 1524M steps count 50847534 primes time 4486 msec test eratosfen3() from 1 to 1000M eratosfen3() 1191M steps count 50847534 primes time 4166 msec Нашел странный косяк в next_prime() Пропускает в дебаге число 76293757 в релизе не пропускает. Не заметил, т.к. в основном в релиз компилировал. Тест: Код: plaintext 1. 2. Похоже косяк с довыделением памяти под биткарту как-то связан, если сразу выделить максимум - не проявляется. Поразбираюсь позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 13:22 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TВрет чудоформула OPTDIV_6(2069) = 345 2069/6 = 344,8 Хм... действительно есть погрешность. Чортов старик Уоррен... Потестил на Java с использованием long64. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 13:43 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonОтлично. Только нам нам надо придумать как это собирать в консоли. Я делаю *.cmd файлы под MinGW (Win_x64). Но честно говоря выглядят они позорно. И я их не коммичу. Хотелось-бы скриптовать сборку приличнее. Я пользовался сборщиками в основном под java (ant,maven,gradle) и слабо знаком с тем какие есть для С/C++. Возможно Илья нас проконсультирует по этому вопросу. CMake используйте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 13:52 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonХм... действительно есть погрешность. Это приближенные вычисления. Я сначала тупо скопипастил, а как сглючило - задумался. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 13:52 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Наверное весь смысл в том как мы интерпретируем результат целочисленного деления. На досуге попробую поделить в столбик в двоичной системе... Ну.. хотя-бы оно сохраняет монотонность и на том спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 13:56 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TХотел затестить вместо %6 maytonПо поводу Уоррена я немного ошибся. Старик писал про оптимизацию целочисленного деления. Вот из моих сорцов. К сожалению делители только до 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Врет чудоформула OPTDIV_6(2069) = 345 2069/6 = 344,8Ну да. 683/2048 == 0,33349609375 и это несколько отличается от 0.33333333333333333 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:00 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonНаверное весь смысл в том как мы интерпретируем результат целочисленного деления. До 2000 точно считает, дальше сказывается погрешность: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:05 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Адаптировал целочисленный квадратный корень для 64х бит. По сути была добавлена еще одна итерация начального приближения. И некоторые константы я перевел в Hex для лучшего понимания. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Прошу тестить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:10 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
MasterZivCMake используйте... Спасибо. Качнул развернул cmake-3.2.1. То что нужно. Не обещаю что буду посвящать этой теме 100% времени но по мере сил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:16 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonПрошу тестить. Не взлетел. Считает точно, но медленно. Посчитал корень всех простых до лярда Код: plaintext 1. 2. sqrt() ты не обгонишь, т.к. там считает процессор. Команда FSQRT По хорошему немного бы точностью пожертвовать, но минимизировать количество итераций, т.е. в нашем случае надо близкое больше, т.к. это предел до которого перебор. Вопрос какая погрешность требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:51 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
У меня - наоборот math::sqrt(double) более медленный. Покажи как ты тестил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 14:53 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TПо хорошему немного бы точностью пожертвовать, но минимизировать количество итераций, т.е. в нашем случае надо близкое больше, т.к. это предел до которого перебор. Вопрос какая погрешность требуется.Дык, выкинуть цикл в конце, сделать одну итерацию. Будет быстрее, но промахиваться вверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:19 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Немного статистики. Мой жлобский метод PBFA-32bit (power brute force) работал аж 33 минуты. От 2 до 1 000 000 000 нашёл аж 50 847 534 primes. При этом было задействовано 262 Мб памяти (типа std::vector<int> ) для кеша. Сегодня подчищу код и опубликую для всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:24 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
BarloneDima TПо хорошему немного бы точностью пожертвовать, но минимизировать количество итераций, т.е. в нашем случае надо близкое больше, т.к. это предел до которого перебор. Вопрос какая погрешность требуется.Дык, выкинуть цикл в конце, сделать одну итерацию. Будет быстрее, но промахиваться вверх. Я уже придумал как. Начальное приближение можно брать с предыдущей итерации. Всё равно они отличаются на [0..1] дробное целое. А на больших значениях x, квадратный корень почти пологий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:26 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonУ меня - наоборот math::sqrt(double) более медленный. Покажи как ты тестил? зафиксировал sqrtspeed.cpp позапускай. У меня такие результаты Код: plaintext 1. 2. 3. добавил isqrt32 т.к. у меня x32 компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:38 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
BarloneDima TПо хорошему немного бы точностью пожертвовать, но минимизировать количество итераций, т.е. в нашем случае надо близкое больше, т.к. это предел до которого перебор. Вопрос какая погрешность требуется.Дык, выкинуть цикл в конце, сделать одну итерацию. Будет быстрее, но промахиваться вверх. Я тестил этот алгоритм сильно вверх тоже плохо, много лишних проходов из-за этого. В итоге просто заменил корень на возведение в квадрат. Выше писал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:47 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, странно. Не совсем такая картина. У меня - ноут. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:13 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonDima T, странно. Не совсем такая картина. От проца наверно зависит. В ноутах электричество надо за счет чего-то экономить. У меня тесты на i7-3770К (это хост, на нем виртуалка ХР с 1 ядром) вот еще тестыскомпилировал в линуксе x64 (тоже виртуалка, там же, 1 ядро) $ g++ sqrtspeed.cpp -O2 -oerat Код: plaintext 1. 2. 3. Вот результат x32 EXE (из прошлого теста) на проце i5-660 Код: plaintext 1. 2. 3. Все равно твой sqrt64 не взлетел. Ускоряй. Тест близкий к реальному использованию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:32 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Да нет-же говорю. Я от него откажусь. Будет другой метод. Или подвид Брезенхейма или кусочно-линейный. Или буду использовать приближение предыдущего шага. А что ты в нём хочешь соптимизировать для целых чисел? Алгоритмически - уже вроде не куда. Можно что-то улучшать базируясь на гистограмме входных данных. Разве что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:57 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonА что ты в нём хочешь соптимизировать для целых чисел? Алгоритмически - уже вроде не куда. Начальное значение у тебя грубо степени двойки охватывает. Точнее посчитать несложно сдвигами и т.п. https://ru.wikipedia.org/wiki/Квадратный_корень При работе в двоичной системе, следует использовать другую оценку 2^(D/2) (здесь D это число двоичных цифр). maytonМожно что-то улучшать базируясь на гистограмме входных данных. Разве что. может это взлетит maytonЯ уже придумал как. Начальное приближение можно брать с предыдущей итерации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38925067&tid=2017971]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 283ms |
| total: | 476ms |

| 0 / 0 |
