remquo: сокращение аргумента?
В спецификации C99 говорится о remquo:
Функции remquo предназначены для реализации сокращений аргументов, которые могут использовать несколько младших битов частного. Обратите внимание, что x может быть настолько большим по величине по отношению к y, что точное представление частного не представляется возможным.
Что такое "сокращение аргумента" в этом контексте, и каков пример того, который может использовать несколько младших битов частного?
1 ответ
Сокращение аргумента означает отображение аргумента периодической функции в канонический период (например, (-π,π] или аналогичный). Если вы использовали π/2 в качестве делителя, младшие биты частного будут достаточны для определения правильный знак / и т. д. для тригонометрических функций.
К сожалению, однако, remquo
бесполезно для реализации стандартного сокращения тригонометрических аргументов, потому что π
иррационально; уменьшение больших аргументов по модулю приближения π даст вам результаты без значащих битов, то есть со всей ошибкой.
Однако, если вы пишете функцию f(x)
определенный как sin(πx) или подобный, период теперь точно представлен в плавающей точке, и remquo
можно делать именно то, что вам нужно, а звонить sin(2*M_PI*x)
напрямую даст результаты без значимых битов (то есть всех ошибок), когда x
большой.