gpt4 book ai didi

将Excel公式转换为C?

转载 作者:行者123 更新时间:2023-11-30 20:05:18 25 4
gpt4 key购买 nike

我需要帮助将此 Excel 公式转换为 C 语言(使用纯 Win32 API,使用 msvcrt 中的 atan2)。 Excel 公式为:

=IF(AND(L9=0;M9=0);0;IF(M9>=0;DEGREES(ATAN2(L9;M9));DEGREES(ATAN2(L9;M9))+360))

我尝试移植它,但我不理解度数约定,因为值不匹配。

此 Excel 公式对应的 C 函数是什么?

<小时/>

好的,我在这里编辑了答案。我成功地创建了一个与 Excel 中的函数完全一样的函数。我用汇编程序编写了它(使用 RosAsm 汇编程序),但移植到 C 应该不难。

[Float_DoublePi: R$ (2*3.1415926535897932384626433832795028841971693993751058)]
[Float_180_Pi: R$ (3.1415926535897932384626433832795028841971693993751058/2)]
[ConvRadianToDegree: R$ (180/3.14159286)]
[FloatZero: R$ 0]

Proc ComputedH:
Arguments @aFact, @bFact, @HFact
Uses ebx, esi, ecx, edi, eax

mov ebx D@aFact
mov esi D@bFact
mov edi D@HFact

.Fpu_If_And R$ebx = R$FloatZero, R$esi = R$FloatZero
fldz | fstp R$edi
.Fpu_Else_If R$esi >= R$FloatZero
Fpu_If R$ebx >= R$FloatZero
fld R$Float_180_Pi
C_call 'msvcrt.atan2' D$ebx, D$ebx+4, D$esi, D$esi+4
fsubrp ST1 ST0 | fabs
Fpu_Else
fld R$Float_180_Pi
C_call 'msvcrt.atan2' D$ebx, D$ebx+4, D$esi, D$esi+4
fsubrp ST1 ST0 | fabs
Fpu_End_If
.Fpu_Else
Fpu_If R$ebx >= R$FloatZero
C_call 'msvcrt.atan2' D$esi, D$esi+4, D$ebx, D$ebx+4 | fadd R$Float_DoublePi
Fpu_Else
; 360-X-(pi+pi/2) ==> 2PI-X-(pi+pi/2) = pi/2-X
fld R$Float_180_Pi
C_call 'msvcrt.atan2' D$ebx, D$ebx+4, D$esi, D$esi+4
fsubrp ST1 ST0 | fabs
Fpu_End_If
.Fpu_End_If

fmul R$ConvRadianToDegree | fstp R$edi

EndP

最佳答案

很简单,让我们一步步来看:

=IF(AND(L9=0;M9=0) // Check this condition
;0 // Do this if true
;IF(M9>=0 // Check this if false
;DEGREES(ATAN2(L9;M9))
;DEGREES(ATAN2(L9;M9))+360))

所以我们可以很容易地转换它:

double output; // our output angle

if (L9 == 0 && M9 == 0) {
output = 0;
} else {
if (M9 >= 0) {
output = atan2(L9, M9);
} else {
output = atan2(L9, M9) + 2*PI;
}
}
output *= 180/PI;

关于将Excel公式转换为C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407811/

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