我需要幫助將此Excel公式轉換爲C(使用純Win32 API,以及來自msvcrt的atan2)。 Excel公式是:將Excel公式轉換爲C?
=IF(AND(L9=0;M9=0);0;IF(M9>=0;DEGREES(ATAN2(L9;M9));DEGREES(ATAN2(L9;M9))+360))
我試圖移植它,但我不明白程度約定,因爲值不匹配。
這個Excel公式的對應C函數是什麼?
好的,我在這裏編輯了答案。我完成了一個和excel中的函數完全一樣的函數。我寫彙編(使用匯編RosAsm),但它shouldn't很難移植到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 [email protected]
mov esi [email protected]
mov edi [email protected]
.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
例如,如果L9 = 2.6774且M9 = -79,7751,則結果值爲271,9222(度數)。 Buyt我無法在端口 – guga
上實現這個結果您可以使用像radians *(180/M_PI)這樣的公式將弧度轉換爲度數(這就是函數'DEGREES'的功能.C中沒有這樣的公式,但是您只是編寫你自己的簡單函數,'M_PI'常量在C語言的'math.h'中定義,並且是_PI_的值 –
您需要在問題中添加*您嘗試的*。您的'c'代碼看起來像 –