Стандарт для синуса очень больших чисел

Я пишу (почти) IEEE 854-совместимую реализацию с плавающей запятой в TeX (которая поддерживает только 32-битные целые числа). Этот стандарт определяет только результат + , - , * , / , сравнение, остаток и sqrt ]: для этих операций результат должен быть идентичен округлению точного результата до представимого числа (в соответствии с режимом округления).

Кажется, я припоминаю, что IEEE указывает, что трансцендентные функции ( sin , exp ...) должны давать точные результаты (в режиме округления до ближайшего по умолчанию они должны выводить одно из двух представимых чисел, окружающих точный результат). Вычислить синус малых чисел довольно просто: сдвиньте кратное 2 * пи, чтобы получить число в диапазоне [0,2 * пи], затем проделайте еще немного работы, чтобы уменьшить диапазон до [0, пи / 4] , и используйте ряд Тейлора.

Теперь предположим, что я хочу вычислить sin (1e300). Для этого мне нужно найти 1e300 по модулю 2 * pi. Для этого необходимо знать 300 (316?) Десятичных знаков числа пи, потому что с 16 десятичными знаками результат не будет иметь никакого значения (в частности, он не может быть точным).

Есть ли стандарт того, какой результат будет sin (1e300) и подобные очень большие числа должны быть?

Что делают другие реализации с плавающей запятой?

7
задан Bruno Le Floch 12 July 2011 в 14:02
поделиться