XC16 コンパイラの DSP ルーチン ヘッダー (dsp.h) には、次の行があります。
/* 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 社が間違った値を使用しているのはなぜですか? 三角関数値の計算に関連する難解な理由がありますか、それとも単に間違いですか? それとも関係ないのでしょうか?