Хорошо, я собираюсь на конечности, потому что я знаю C, но я не знаю Java.
Буквальное переписывание этого C-кода на Java требует больших усилий.
Даже в C код не переносим.
Среди прочего он опирается на:
Размер чисел с плавающей запятой.
Размер целых чисел.
Внутреннее представление чисел с плавающей точкой.
Выравнивание байтов как чисел с плавающей точкой, так и целых чисел.
Сдвиг вправо (т.е. я >> 1) осуществляется с использованием логического сдвига вправо
в отличие от арифметического сдвига вправо (который будет сдвиг в 1 на
целые числа с битом высокого порядка 1 и, таким образом, больше не равняются делению
на 2).
Я понимаю, что Java компилируется в байт-код, а не напрямую в
Машинный код. Разработчики интерпретаторов байтового кода настраиваются с помощью
предположения, основанные на спецификации для байтового кода и понимания
что выводит компилятор из разумного источника ввода
код.
Подобные хаки не попадают под зонтик "разумного источника ввода".
Нет оснований ожидать, что переводчик выполнит
быстрее с вашим взломом C, на самом деле есть хороший шанс
это будет медленнее.
Мой совет: игнорировать код С.
Ищите выигрыш в эффективности, ориентированный на Java.
Концепция взлома C:
Приблизительно 1 / квадрат (х), используя знания о том, что внутренний
представление чисел с плавающей точкой уже имеет
экспонента, вычеркнутая из числа, экспонента (x) / 2 быстрее
вычислить, чем root (x), если у вас уже есть показатель степени (x).
Затем взломщик выполняет одну итерацию метода Ньютона.
уменьшить погрешность в приближении. Я предполагаю
одна итерация уменьшила ошибку до приемлемого уровня.
Возможно, концепция требует исследования на Java,
но детали будут зависеть от глубоких знаний
как реализован JAVA, а не как C.