В связи с одним обсуждением в Этюдах мне стало интересно, какой вариант round() народ использует на практике (в math.h есть ceil и floor, но если требуется именно round()). Я сам обычно использую "округление вверх для .5": (int)((double)x + 0.5)). В стандарте C99 round() делает более грамотное округление -- половинчатые числа округляются от нуля, т.е. 0.5->1, -0.5->-1.
Оказалось, что это не такая уж и простая задача. Вот, наткнулся на ветку, в которой народ обсуждает, как это грамотно сделать: http://codingforums.com/showthread.php?t=10827. Особенно понравился последний комментарий, после которого ветку закрыли...
When my browser first loaded this page and I read your post, I really didn't care a whole lot as I was but immediately convinced that you were quite ordinary in terms of intelligence, but when I found out that jkd had posted his message before you had posted yours, I began to realize the maginute of your lack of at birth given gifts. Your post was so unnecessary and stupid that it made me euforic about my IQ-result of 144, which a few days ago I thought to be shamefully low compared to certain idols of mine.
I am but certain that I have written nothing of what you want to hear, but the truth has mysterious ways of deploying itself. Though it could this time be explained by my adrenaline aneurism or my autistic behaviour, I think you should gather all your mental and physical resources and repeatedly attempt to increase thy brain acitivity.
Здравствуйте, Meer, Вы писали:
M>Здравствуйте, vadimcher, Вы писали:
V>>В связи с одним обсуждением в Этюдах мне стало интересно, какой вариант round() народ использует на практике
M>Функции округления из boost.
Ну boost -- это буст, но ради округления буст ставить, если нет. В c99 вроде бы есть round(). Кроме того, как выяснилось, даже такой вопрос иногда вызывает трудности.
Здравствуйте, vadimcher, Вы писали:
V>В связи с одним обсуждением в Этюдах мне стало интересно, какой вариант round() народ использует на практике (в math.h есть ceil и floor, но если требуется именно round()). Я сам обычно использую "округление вверх для .5": (int)((double)x + 0.5)). В стандарте C99 round() делает более грамотное округление -- половинчатые числа округляются от нуля, т.е. 0.5->1, -0.5->-1.
Мне пришлось написать свою функцию. Она округляет модуль числа до ближайшего целого, а потом добавляет знак.
//--- Округляет число до ближайшего целого ---
int rint(double fff)
{
int sign,res;
double vsp,ost;
V>В связи с одним обсуждением в Этюдах мне стало интересно, какой вариант round() народ использует на практике (в math.h есть ceil и floor, но если требуется именно round()). Я сам обычно использую "округление вверх для .5": (int)((double)x + 0.5)). В стандарте C99 round() делает более грамотное округление -- половинчатые числа округляются от нуля, т.е. 0.5->1, -0.5->-1.
((double)x + 0.5). Но приведение к инту -- математическое ( 0.4f -> 0, -0.4f -> -1 ), через floor().
Иначе возникают нюансы при работе алгоритмов, разработанных математиками.
K13>((double)x + 0.5). Но приведение к инту -- математическое ( 0.4f -> 0, -0.4f -> -1 ), через floor().
K13>Иначе возникают нюансы при работе алгоритмов, разработанных математиками.