You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++生成正弦表异常:数组始终填充为0,求问题排查

正弦表生成全为0的问题解决方法

问题根源在i / n的整数除法上:

  • i和n都是int类型,当i取值范围为0到32767时,i / n的整数除法结果始终是0
  • 代入后sin(TWO_PI * 0)的结果为0,乘以amp后仍为0,最终整个数组被填充为0

修正方法是将除法操作转为浮点除法,只需把其中一个操作数强制转换为浮点数即可:

#define TWO_PI (3.14159 * 2)
int16_t sineTable[32768];

const int32_t n = 32768;
const int16_t amp = 2047;
   
for ( int i = 0; i < n; i++ ) {
    // 将i转为double,让除法变为浮点运算
    sineTable[i] = static_cast<int16_t>(sin(TWO_PI * (static_cast<double>(i) / n)) * amp);
};

额外优化建议:

  • 提前计算TWO_PI / n,避免循环内重复做除法,提升效率:
    const double step = TWO_PI / n;
    for (int i = 0; i < n; i++) {
        sineTable[i] = static_cast<int16_t>(sin(step * i) * amp);
    }
    
  • sin函数返回double类型,转成int16_t时用static_cast做显式类型转换,代码更规范。

内容的提问来源于stack exchange,提问作者Massimo Vantaggio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:47:49