Справочник Ada 2012
G.2.4 Требования к точности для элементарных функций
В строгом режиме производительность Numerics.Generic_Elementary_Functions должна соответствовать указанной здесь спецификации.
Требования к реализации
Когда исключение не возникает, результат вычисления функции в экземпляре EF из Numerics.Generic_Elementary_Functions принадлежит интервалу результата, определённому как наименьший модельный интервал EF.Float_Type, содержащий все значения вида f · (1.0 + d), где f — точное значение соответствующей математической функции при заданных значениях параметров, d — действительное число, а |d| меньше или равно максимальной относительной погрешности функции. Функция возвращает значение, принадлежащее интервалу результата, когда оба его предела принадлежат безопасному диапазону EF.Float_Type; в противном случае,
- если EF.Float_Type'Machine_Overflows имеет значение True, функция возвращает значение, принадлежащее интервалу результата, или вызывает Constraint_Error, сигнализируя о переполнении;
- если EF.Float_Type'Machine_Overflows имеет значение False, результат определяется реализацией.
Максимальная относительная погрешность, демонстрируемая каждой функцией, приведена ниже:
- 2.0 · EF.Float_Type'Model_Epsilon в случае функций Sqrt, Sin и Cos;
- 4.0 · EF.Float_Type'Model_Epsilon в случае функций Log, Exp, Tan, Cot и обратных тригонометрических функций; и
- 8.0 · EF.Float_Type'Model_Epsilon в случае прямых и обратных гиперболических функций.
Максимальная относительная погрешность, демонстрируемая операцией возведения в степень, зависящая от значений операндов, составляет (4.0 + |Right · log(Left)| / 32.0) · EF.Float_Type'Model_Epsilon.
Максимальная относительная погрешность, приведённая выше, применяется ко всем областям определения прямых тригонометрических функций, когда указан параметр Cycle. Когда параметр Cycle опущен, максимальная относительная погрешность, приведённая выше, применяется только тогда, когда абсолютное значение параметра угла X меньше или равно некоторому определённому реализацией пороговому значению угла, которое должно быть не меньше EF.Float_Type'Machine_Radix Floor(EF.Float_Type'Machine_Mantissa/2). За пределами порогового значения угла точность прямых тригонометрических функций определяется реализацией.
Предписанные результаты, указанные в A.5.1 для некоторых функций при определённых значениях параметров, имеют приоритет над границами максимальной относительной погрешности; фактически, они сужают интервал результата, допускаемый границами максимальной относительной погрешности, до единственного значения. Дополнительные правила с аналогичным эффектом приведены в таблице G-1 для обратных тригонометрических функций при определённых значениях параметров, для которых математический результат, возможно, не является модельным числом EF.Float_Type (или даже является трансцендентным). В каждой записи таблицы значения параметров такие, что результат лежит на оси между двумя квадрантами; соответствующее правило точности, имеющее приоритет над границами максимальной относительной погрешности, состоит в том, что интервал результата является модельным интервалом EF.Float_Type, связанным с точным математическим результатом, приведённым в таблице.
Этот абзац был удалён.
Последняя строка таблицы предназначена для применения, когда EF.Float_Type'Signed_Zeros имеет значение False; две строки, расположенные непосредственно над ней, — когда EF.Float_Type'Signed_Zeros имеет значение True, а параметр Y имеет нулевое значение с указанным знаком.
| Функция | Значение X | Значение Y | Точный результат при указанном Cycle |
Точный результат при опушенном Cycle |
|---|---|---|---|---|
| Arcsin | 1.0 | n.a. | Cycle/4.0 | π/2.0 |
| Arcsin | –1.0 | n.a. | –Cycle/4.0 | –π/2.0 |
| Arccos | 0.0 | n.a. | Cycle/4.0 | π/2.0 |
| Arccos | –1.0 | n.a. | Cycle/2.0 | π |
| Arctan и Arccot | 0.0 | положительное | Cycle/4.0 | π/2.0 |
| Arctan и Arccot | 0.0 | отрицательное | –Cycle/4.0 | –π/2.0 |
| Arctan и Arccot | отрицательное | +0.0 | Cycle/2.0 | π |
| Arctan и Arccot | отрицательное | –0.0 | –Cycle/2.0 | –π |
| Arctan и Arccot | отрицательное | 0.0 | Cycle/2.0 | π |
Величина, на которую результат обратной тригонометрической функции может переходить в смежный квадрант, соответствующий главному ответвлению, как указано в A.5.1, ограничена. Правило заключается в том, что результат принадлежит наименьшему модельному интервалу EF.Float_Type, содержащему обе границы квадранта, соответствующего главному ответвлению. Это правило также имеет приоритет над границами максимальной относительной погрешности, фактически сужая интервал результата, допускаемый ими.
Наконец, следующие спецификации также имеют приоритет над границами максимальной относительной погрешности:
- Абсолютное значение результата функций Sin, Cos и Tanh никогда не превышает единицы.
- Абсолютное значение результата функции Coth никогда не меньше единицы.
- Результат функции Cosh никогда не меньше единицы.
Рекомендации по реализации
Версии прямых тригонометрических функций без параметра Cycle не следует реализовывать, вызывая соответствующую версию с параметром Cycle равным 2.0*Numerics.Pi, поскольку это не обеспечит требуемой точности в некоторых частях области определения. По той же причине версию Log без параметра Base не следует реализовывать, вызывая соответствующую версию с параметром Base равным Numerics.e.