В ЦОС в XC16 компилятора подпрограммы заголовка (dsp.h) есть такие строки:Microchip XC16 dsp.h определяет неправильное значение PI?
/* Some constants. */
#ifndef PI /* [ */
#define PI 3.1415926535897931159979634685441851615905761718750 /* double */
#endif /* ] */
#ifndef SIN_PI_Q /* [ */
#define SIN_PI_Q 0.7071067811865474617150084668537601828575134277343750
/* sin(PI/4), (double) */
#endif /* ] */
Но, значение PI является на самом деле (в том же количестве знаков после запятой) составляет:
3.1415926535897932384626433832795028841971693993751
Значения, определяемые dsp.h, начинают расходиться в 16-м знаке после запятой. Для операций с двойной плавающей запятой это очень важно. Для представлений Q15 это не имеет значения. Значение sin (pi/4) также отклоняется от правильного значения в 16-м знаке после запятой.
Почему Microchip использует неправильное значение? Есть ли какая-то эзотерическая причина, связанная с вычислением значений функции триггера, или это просто ошибка? Или, может быть, это не имеет значения?
nasa, по-видимому, использует 16 цифр для pi для управления космическим кораблем, и поскольку они (обычно) не пропустят свои цели, я бы не стал беспокоиться ... –