Формула синуса использует точки, симметрично распределенные вокруг нуля, а формат косинуса - нет. Особенности формата с плавающей точкой, особенно гранулярность, с которой он представляет числа, симметричны c вокруг нуля, и поэтому вычисления, симметричные c вокруг нуля, дают результаты, симметричные c вокруг нуля.
Формула косинуса использует cos
в точках (2 i −1) / (2 n + 2) π для 1 ≤ i ≤ n + 1. Для n = 20 эти точки составляют 1/42 π, 3/42 π, 5/42 π,… 41/42 π.
1/42 π составляет около 0,075. Наибольшая сила двух, не превышающая 0,075, равна 2 −4 . Когда 1/42 π вычисляется в формате бинарного IEEE-754, который имеет 53 бита в его значении, масштабирование с плавающей точкой таково, что наибольшая битовая позиция в значении представляет 2 −4 , и младшая битовая позиция представляет 2 -56 . Таким образом, результат должен быть округлен до ближайшего кратного 2 −56 . Напротив, 41/42 π составляет около 3,067, и позиция старшего бита его значения представляет 2 2 , в то время как позиция младшего бита представляет 2 -50 . Таким образом, результат должен быть округлен до ближайшего кратного 2 -50 , шкала в 64 раза больше, чем для 1/42 π. Таким образом, ошибки округления в вычислениях с плавающей запятой обычно различаются для 1/42 π и 41/42 π, для 3/42 π и 39/42 π и т. Д.
В формуле синуса используется sin
в точках ( n + 2-2 i ) / (2 n + 2) π для 1 ≤ i ≤ n + 1. Для n = 20 эти точки составляют 20/42 π, 18/42 π, 16/42 π,… −16/42 π, −18/42 π, −20/42 π. При этом, когда 20/42 π и -20/42 π вычисляются в двоичном виде64, они оба используют одно и то же масштабирование для значимого. Таким образом, их ошибки округления идентичны, кроме знака, и вычисленные результаты идентичны, за исключением знакового бита. Аналогично, 18/42 π и −18/42 π используют одинаковое масштабирование, и все члены соединяются с симметричным c партнером, за исключением 0/42 π, но это ноль и ошибка вычисления (ноль) это симметрично c с самим собой.
Кроме того, типичные реализации подпрограммы sin
симметричны c относительно нуля, так что sin(-x)
и -sin(x)
дают идентичные результаты. Как правило, они работают, уменьшая аргумент по модулю 2π (по крайней мере, в действительности) и оценивая полином, который приближает синус, и этот полином обычно симметричен c вокруг нуля (имеет все нечетные степени своей переменной x ). Таким образом, вычисление sin(x)
и sin(-x)
сохраняет симметрию, как и итоговое умножение на 5. (cos
реализации могут иметь аналогичную симметрию, но, поскольку аргументы в этом случае уже асимметричны c, cos
не может восстановить симметрию.)