假設這些都是你總是使用這種計算的值,那麼我會做這樣的事情:
D = I/(65535/C);
或
D = I/4369;
由於C爲65535的一個因素。這將有助於減少超出可用整數範圍的可能性(即,如果您只有16位未簽名的整數)。
在更一般的情況下,如果您認爲存在I和C的乘法會導致您使用的整數類型的允許範圍之外的值的風險(即使最終結果將在裏面該範圍內),您可以分解出的分子和分母GCD爲:
INT I = 41828;
INT C = 15;
INT DEN = 65535;
INT GCDI = GCD(I, DEN);
DEN = DEN/GCDI;
I = I/GCDI;
INT GCDC = GCD(C, DEN);
DEN = DEN/GCDC;
C = C/GCDC;
INT D = (I * C)/DEN;
哪裏DEN是你的分母(65535在這種情況下)。在所有情況下,這不會爲您提供正確的答案,特別是如果I和C都與DEN和I * C> MAX_INT互爲素數。
對於您提出的較大問題,整數值的除法將始終會丟失小數部分(相當於floor函數)。保留我們認爲是「十進制」部分的信息的唯一方法是通過可以從模數導出的餘數。我強烈建議你不要混用這些不同號碼系統的含義。整數只是整數。如果你需要它們是浮點數,你應該真的使用浮點數,而不是整數。如果所有你感興趣的是向用戶顯示小數部分(即你沒有真正使用它進行進一步計算),那麼你可以編寫一個例程來將餘數轉換爲表示餘數的字符串。
對不起,我不明白。什麼是MOD? – John 2010-04-02 21:56:05
MOD返回餘數。所以,說我有6/4 DIV會返回1,而MOD會返回2.我需要在上面編輯我的答案...... 638對於MOD來說是不正確的。 :)剛纔看到了。 http://en.wikipedia.org/wiki/Modulo_operation – 2010-04-02 22:00:12