请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F2800137 您好、
对于这种操作、如果16位乘以16位、然后除以、则临时结果将溢出。 可以在哪里设置编译器来避免结果错误?

谢谢
乔伊斯
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、
对于这种操作、如果16位乘以16位、然后除以、则临时结果将溢出。 可以在哪里设置编译器来避免结果错误?

谢谢
乔伊斯
您好、Joyce、
如果16位乘以16位再除以16位,则临时结果将溢出。
这是预期的编译器行为。 有关如何在 C 代码中正确编写乘法、请参阅此应用手册。
"关于乘法的一个常见误解是乘法以无限精度进行、然后被截断为结果类型。 不是这样;乘法将以*最窄*的合法类型(根据操作数的类型)进行,然后将*转换*为结果类型,这可能是一个缩小或扩大的转换。"
为了获得正确的结果、您需要确保将乘以两个32位值、您可以显式声明这一点。
(uint32_t) lv_ctl.p_val [0]*(uint32_t) cfg->Duty / 1000
此致!
马瑞安