|
Счастливые числа
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravВот если бы написали так: `std::sqrt(Value)+0.5`. Другое дело. Ну да, в этом случае код можно было бы сократить до "return false". Почему же? Это же классическое округление. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:24 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
ИМХО плавающая точка тут не самый лучший вариант. Целое не может быть более 52-х бит (размер мантиссы в double), больше приведет к ошибкам. Тут можно обойтись целыми, применить бинарный поиск. Для 64-битного числа результат будет нечетное в диапазоне 1...2 32 -1, т.е. максимум за 31 шаг найдется корень если он есть. Возможно это будет даже быстрее чем std::sqrt() ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:31 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
petravПочему же? Это же классическое округление. Потому что именно для данной функции оно даст неверный результат. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:35 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ну да, в этом случае код можно было бы сократить до "return false". Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:39 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Для четырехбайтных надо брать не максимальное значение, а чуть меньше, чтобы не перескочить через ноль в цикле. Но на моей машине это все равно долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:55 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПочему же? Это же классическое округление. Потому что именно для данной функции оно даст неверный результат. Ты имхо чего-то не досмотрел. Ну или пруф в студию. Одно верное входное число для которого будет неверный результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:13 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
AmKadДля 4-байтных (uint32_t) не дождался результата. Это из-за корня. Он медленный. petravТы имхо чего-то не досмотрел. Да, я недосмотрел, что умножение в return идёт в целых. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:31 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Проверка на целых Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:36 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ... Это из-за корня. Он медленный. ... Корень - единственная из функций, вычисление которой было стандартизировано в самой исходной версии IEEE Поэтому он и быстрый - используются алгоритмы, обладающие не меньше, чем квадратичной сходимостью, с общей зависимостью скорости вычисления результата от входного значения, не хуже log(N), и самый гарантированно точный - точность представимого результата в 0.5ulp Так что медленно не потому, что корень медленный, а потому, что его используют в квадрат лишнее количество раз, вместо того, чтобы просто оценить только края, что и требуется в именно этой задаче. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:50 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Dima T Проверка на целых Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В качестве начального приближения здесь выбирают половину разрядной сетки от максимального значения аргумента. Можно перевести аргумент в double (если экспонента позволяет) и использовать уже расчитанный вещественный корень как первое приближение и потом быстро конвертнуть обратно в arbitrary и уже сделать парочку контрольных выстрелов до достижения точности. Точности снизу или сверху кому как удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 19:54 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Открываем "Алгоритмические трюки" Генри Уоррена-младшего: Глава 11. Некоторые элементарные функции 11.1. Целочисленный квадратный корень. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 06:31 |
|
Счастливые числа
|
|||
---|---|---|---|
#18+
Из наших экспериментов 15 года с простыми числами. Это и была копи-паста из Генри Уоррена. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:54 |
|
|
start [/forum/topic.php?fid=57&gotonew=1&tid=2017228]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 167ms |
0 / 0 |