С точки зрения математика выражение n - n/2 - n/4 - n/8 - n/16 - ... очевидным образом равно нулю. Быстро и не особенно задумываясь, ответьте, чему оно равно для целых n с точки зрения программиста.
сорри, это совсем не думая, я почему-то представил, что n=1
а так, если еще подумать, то что-то с log2(n) кажется, скорее log2(n)/2, потому что от кажедого второго члена будет единица оставться, а членов > 1 вроде log2(n)
а если еще немножко подумать, то, возможно, число единиц в двоичной записи числа (что в среднем, наверное, будет log2(n)/2, но реально от 1 то log2(n))
возможно, не совсем честный, в смысле, нарушает "Быстро и не особенно задумываясь": я начал смотреть конкретные примеры, сначала показалось, "ну в среднем на каждом втором члене единичку получим", потом увидел, что это очень уж "средная температура по больнице", и что единичка будет там и только там, где она и в самом числе в двоичной записи про отрицательные я и задумывался :)
Языки, в которых для n<0 это выражение не определено, должны быть подвергнуты остракизму. А в которых определено, там, конечно, правильный ответ sign(n)*popcount(abs(n)).
А вот нифига. Вычисление знаменателей 2, 4, 8, ... приведет либо к ошибке переполнения (если язык проверяет на переполнение, как С#), либо к делению на ноль.
no subject
Date: 2011-10-20 03:17 am (UTC)no subject
Date: 2011-10-20 03:22 am (UTC)no subject
Date: 2011-10-20 03:25 am (UTC)а так, если еще подумать, то что-то с log2(n) кажется, скорее log2(n)/2, потому что от кажедого второго члена будет единица оставться, а членов > 1 вроде log2(n)
no subject
Date: 2011-10-20 03:30 am (UTC)no subject
Date: 2011-10-20 04:07 pm (UTC)no subject
Date: 2011-10-21 06:06 am (UTC)потом увидел, что это очень уж "средная температура по больнице", и что единичка будет там и только там, где она и в самом числе в двоичной записи
про отрицательные я и задумывался :)
no subject
Date: 2011-10-20 03:19 am (UTC)no subject
Date: 2011-10-20 03:24 am (UTC)no subject
Date: 2011-10-20 04:04 am (UTC)no subject
Date: 2011-10-20 04:46 am (UTC)no subject
Date: 2011-10-20 03:55 pm (UTC)no subject
Date: 2011-10-20 03:25 am (UTC)no subject
Date: 2011-10-20 04:46 am (UTC)no subject
Date: 2011-10-20 04:00 am (UTC)no subject
Date: 2011-10-20 03:54 pm (UTC)no subject
Date: 2011-10-20 04:02 am (UTC)n>=0 -> число единичных битов у n
no subject
Date: 2011-10-20 04:48 am (UTC)no subject
Date: 2011-10-20 11:17 pm (UTC)С какой стати?
no subject
Date: 2011-10-20 11:21 pm (UTC)no subject
Date: 2011-10-20 04:08 am (UTC)no subject
Date: 2011-10-20 04:49 am (UTC)no subject
Date: 2011-10-20 11:50 am (UTC)no subject
Date: 2011-10-20 03:36 pm (UTC)no subject
Date: 2011-10-20 04:38 pm (UTC)no subject
Date: 2011-10-20 05:05 pm (UTC)no subject
Date: 2011-10-20 04:18 am (UTC)no subject
Date: 2011-10-20 04:49 am (UTC)no subject
Date: 2011-10-20 04:20 am (UTC)no subject
Date: 2011-10-20 04:36 am (UTC)no subject
Date: 2011-10-20 05:05 am (UTC)Если деление предполагать вещественным, конечно.
no subject
Date: 2011-10-20 05:12 am (UTC)no subject
Date: 2011-10-20 04:30 am (UTC)(я не особенно задумывался)
no subject
Date: 2011-10-20 04:51 am (UTC)no subject
Date: 2011-10-20 09:27 am (UTC)Кто-нибудь может объяснить?
no subject
Date: 2011-10-20 09:38 am (UTC)Число n-n/2 равно n/2, если n - четно и n/2 + 1, если n - нечетно.
Получается, что при последовательном вычитании эти +1 накапливаются и остаются в остатке.
Примерно, так?
no subject
Date: 2011-10-20 03:48 pm (UTC)