gpt4 book ai didi

c - 简化冗长的表达式。那里有什么工具吗?

转载 作者:行者123 更新时间:2023-11-30 14:21:38 25 4
gpt4 key购买 nike

我正在从事这项令人大脑 NumPy 的任务,我必须简化这样的表达式:

coef = ((((((((((inv_nrg >> 16) * (int)((short)nl)) + (((inv_nrg & 0x0000FFFF) * (int)((short)nl)) >> 16)))) + ((inv_nrg * ((16 == 1 ? (nl >> 1) + (nl & 1) : ((nl >> 15) + 1) >> 1)))))) >> 16) * (int)((short)(1024 << 1))) + ((((((((((inv_nrg >> 16) * (int)((short)nl)) + (((inv_nrg & 0x0000FFFF) * (int)((short)nl)) >> 16)))) + ((inv_nrg * ((16 == 1 ? (nl >> 1) + (nl & 1) : ((nl >> 15) + 1) >> 1)))))) & 0x0000FFFF) * (int)((short)(1024 << 1))) >> 16));
}

一定有一个工具可以接受上面的表达式,咀嚼它并吐出一个更干净和简单的表达式?

请帮助我 - 我的大脑快 NumPy 了!!!

最佳答案

将其分解为多个部分(并让编译器负责优化它)

例如,您可以将 inv_nrg >> 16 分配给变量 inv_nrg_highinv_nrg & 0x0000ffffinv_nrg_low

相同

一些数字常量也可以简化 - (1024 << 1) 可以替换为实际值。

其中还有一些“死”表达式 (16 == 1? stuff1 : stuff2 ) 可以用 stuff2 替换,因为 16 永远不等于 1。

我将让您完成实际删除所有多余括号并替换变量的麻烦工作。这是完全有可能的,我已经完成了大部分工作,只是为了看看它的作用(对我来说没有意义,但没关系)。

编辑:花了几分钟,我想出了这个:

int inv_nrg_high = inv_nrg >> 16;
int inv_nrg_low = inv_nrg & 0xFFFF;
int nl_sh_p1_sh = ((nl >> 15) + 1) >> 1;
int x = ((inv_nrg_high * nl)) + ((inv_nrg_low * nl)) >> 16;
int y = (x + inv_nrg * nl_sh_p1_sh);

coef = ((y >> 16) * 2048) + ((y & 0x0000FFFF) * 2048) >> 16);

[我不是 100% 确定它是正确的,但也相差不远了。

[它看起来像是来自 C 预处理器的东西,并且可能是一些复杂的定点数学或类似的东西的结果]

关于c - 简化冗长的表达式。那里有什么工具吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com