Какой наиболее эффективный алгоритм целочисленного n-го корня для малых чисел? - PullRequest
0 голосов
/ 04 июня 2019

В Википедии есть небольшая статья о поиске n -го корня вещественных чисел и другой статьи о более эффективной реализации , обе из которых, очевидно, могут быть адаптированы к плавающим значениям.И, конечно же, существуют эффективные алгоритмы целочисленного квадратного корня - на этом сайте есть несколько вопросов только об эффективных реализациях для этого.

Но все, что касается реалов, и все, что меня беспокоит, это целые числа. Я нашел существующий вопрос по теме , где это может показаться почти дубликатом, но где спрашивается о , если существует эффективный алгоритм, я ищу что наиболее эффективным является алгоритм.

Для контекста это будет использоваться только с 32-разрядными целыми числами дополнения до двух (в частности, с целыми числами со знаком JS), и это будет как часть общего алгоритма возведения в степень целочисленного со знаком.int iexp(int base, int exp), обработка случая отрицательных показателей.Бит-хаки и другие два дополнения являются честной игрой здесь - мне все равно, и я понимаю их в некоторой степени.(Это для реализации стандартной библиотеки для языка, над которым я работаю, поэтому я бы предпочел, чтобы это не было медленным.)

И язык не имеет значения - я могу переводить все, что угодно, будь то C, JS, Python или даже OCaml.

1 Ответ

2 голосов
/ 04 июня 2019

При n> 2 серьезным вариантом является дихотомический поиск в таблице соответствия. Для n = 3 таблица занимает 1290 записей (следовательно, 11 дихотомических шагов). Для n = 4, 215 записей (8 шагов) и n = 5, 75 записей (7 шагов)…

Если я прав, вы можете даже сжать таблицы, потому что для больших чисел младшие разряды не имеют значения, а аргументы могут быть уменьшены. (Это необходимо расширить.)

Для n> 30 единственными (усеченными) значениями являются 0 или 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...