Вычисление правильно округленного / почти правильно округленного кубического корня с плавающей точкой

Предположим, что правильно округленные стандартные библиотечные функции, такие как найденные вCRlibm доступны. Тогда как можно вычислить правильно округленный кубический корень из входных данных двойной точности?

Этот вопрос не является «реальной проблемой, с которой [я] сталкиваюсь», чтобы процитировать FAQ. Это немного похоже на домашнюю работу таким образом. Но кубический корень является часто встречающейся операцией, и можно представить, что этот вопрос является реальной проблемой, с которой кто-то сталкивается.

Поскольку «лучшие вопросы переполнения стека содержат немного исходного кода», вот немного исходного кода:

  y = pow(x, 1. / 3.);

Вышеупомянутое не вычисляет правильно округленный кубический корень, потому что 1/3 не представляется точно какdouble.

ДОПОЛНИТЕЛЬНЫЕ ПРИМЕЧАНИЯ:

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

C99 включает в себяcbrt() функция, но нельзя ожидать, что она будет правильно округленаили даже верный для всех компиляторов. Дизайнеры CRlibm могли бы включитьcbrt() в списке предоставленных функций, но они этого не сделали. Ссылки на реализации, доступные в других библиотеках правильно округленных математических функций, приветствуются.

Ответы на вопрос(2)

Ваш ответ на вопрос