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

C++计算电流时出现截断错误,结果与预期值不符

搞定RLC电路电流计算的误差问题

看起来你在RLC串联交流电路的电流计算上踩了个常见小坑,咱们一步步捋清楚问题出在哪,再给你修正代码。

问题根源:阻抗公式漏了容抗

交流RLC串联电路的电流计算公式是 $I = \frac{E}{Z}$,其中阻抗模 $Z = \sqrt{R^2 + (X_L - X_C)^2}$——这里的核心是感抗$X_L$要减去容抗$X_C$,而不是只算感抗的平方。

先手动验证下正确结果:

  • 感抗 $X_L = 2\pi f L = 23.14159200*0.01476 ≈ 18.535$ Ω
  • 容抗 $X_C = \frac{1}{2\pi f C} = 1/(23.14159200*0.0001) ≈ 7.9577$ Ω
  • 电抗差 $X_L - X_C ≈ 10.5773$ Ω
  • 阻抗模 $Z = \sqrt{15^2 + 10.5773^2} ≈ 18.354$ Ω
  • 电流 $I = 15/18.354 ≈ 0.816918$ A,和预期完全匹配。

而你的结果0.628818A,反推回去是用了$Z = \sqrt{R^2 + X_L^2}$,也就是没减容抗,这就是误差的来源!

修正后的完整代码

#include <iostream>
#include <cmath>
#include <iomanip>

int main() {
    const double PI = 3.14159;
    double r = 15;
    double f = 200;
    double c = 0.0001;
    double l = 0.01476;
    double e = 15;

    // 计算感抗和容抗
    double xl = 2 * PI * f * l;
    double xc = 1 / (2 * PI * f * c);
    // 正确计算阻抗模:感抗减容抗的平方加上电阻平方,再开根号
    double impedance = std::sqrt(std::pow(r, 2) + std::pow(xl - xc, 2));
    double ans = e / impedance;

    // 输出6位小数的高精度结果
    std::cout << std::fixed << std::setprecision(6) << "计算电流:" << ans << "A" << std::endl;

    return 0;
}

关键修正点

  • 新增了容抗xc的计算,这是你原代码里缺失的关键部分
  • 电抗项使用xl - xc代入公式,而不是单独的感抗
  • 用std::fixed和std::setprecision(6)保证输出精度和预期一致

运行这段代码,就能得到你想要的0.816918A啦。

内容的提问来源于stack exchange,提问作者Daine MacTavish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:30