有誰知道一個開源的C或C++函數庫,它具有實現人們可能想要的每個整數除法模式的函數?可能的行爲(對於陽性結果):int劃分庫?
round_down, round_up,
round_to_nearest_with_ties_rounding_up,
round_to_nearest_with_ties_rounding_down,
round_to_nearest_with_ties_rounding_to_even,
round_to_nearest_with_ties_rounding_to_odd
與每個(除了舍入到偶數和舍入到奇數),其具有兩個變體
// (round relative to 0; -divide(-x, y) == divide(x, y))
negative_mirrors_positive,
// (round relative to -Infinity; divide(x + C*y, y) == divide(x, y) + C)
negative_continuous_with_positive
。
我知道該怎麼寫,但肯定有人已經這樣做了嗎?
作爲一個例子,如果我們假設(這是常見和受權C++ 11),其內置有符號整數除法輪朝向零,而內置的模量爲與此一致,那麼
int divide_rounding_up_with_negative_mirroring_positive(int dividend, int divisor) {
// div+mod is often a single machine instruction.
const int quotient = dividend/divisor;
const int remainder = dividend % divisor;
// this ?:'s condition equals whether quotient is positive,
// but we compute it without depending on quotient for speed
// (instruction-level parallelism with the divide).
const int adjustment = (((dividend < 0) == (divisor < 0)) ? 1 : -1);
if(remainder != 0) {
return quotient + adjustment;
}
else {
return quotient;
}
}
加分點:多參數類型的工作;快速;可選地返回模量;不要爲任何參數值溢出(當然,除以零和MIN_INT/-1除外)。
如果我沒有找到這樣的庫,我會寫一個在C++ 11,鬆開,這裏鏈接到它的答案。
C++ 11和更多的Boost 。但我不記得那些程度。 – chris
有可能是沒有圖書館,因爲你可以通過添加0.5和鑄造爲int – technosaurus
@technosaurus,獲得正常的四捨五入行爲'的std :: round'做這件事情。 – chris