在 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 使用的值不正确?是否有一些与计算三角函数值相关的深奥原因,或者这只是一个错误?或者也许没关系?