1
我有一些代碼是從Javascript獲取的。該計劃的原始目的是計算太陽輻射。它計算太陽位置,距離太陽的地球距離,小時角,天頂角,方位角等。我試着分析我已經改寫成C的程序的一部分。這是計算恆星時間的部分。C中的恆星時間計算
僅適用於上下文的目的:
// Sidereal time (Theta0)
double GMST = 280.46061837+360.98564736629*(i->JulianDate-2451545.);
// Sidereal_time = GMST + 0.000387933*T2 - T3/38710000
double Sidereal_time = GMST+0.000387933*T*T
-T*T*T/38710000.;
注:I-> JulianDate是儒略曆,它是從用戶輸入的日期開始計算。
我還發現了一些有趣的來源,介紹瞭如何計算網站真實時間here。
問題
現在的代碼,在這裏我想知道關於它的一部分:爲什麼這個條件塊來給我
// Replacement code for Sidereal=fmod(Sidereal,360.)
double S_save=Sidereal_time/360.;
if (S_save < 0.) Sidereal_time=Sidereal_time-ceil(S_save)*360.;
else Sidereal_time=Sidereal_time-floor(S_save)*360.;
if (Sidereal_time < 0.) Sidereal_time+=360.;
你能解釋一下嗎?我看到註釋:Sidereal = fmod(Sidereal,360。)但我不明白爲什麼作者用長塊條件語句替換短代碼。任何想法歡迎。
它試圖限制0.0和360.0 *之間的值,而不使用庫函數['fmod'](http://en.cppreference.com/w/c/numeric/math/fmod)。也許作者認爲會獲得更好的表現,並且知道'Sideral_time'並不太離譜。 –
fmod - 計算除法運算的浮點餘數...爲什麼不使用'SideReal%360'?用這個簡短的陳述代替代碼是否合適? – user1141649
@ user1141649 SideReal是double類型的,因此模數將無法正常工作。 –