Там походу все переписать надо руками.по тому что я прочитал из статьй етой так эта ОС просто картинка не чего не работает открывает картинку одну за другой какая разница как называется эта картинка-блокнот или терминал
Если все равно не чего не делает и хорошо что не делает было хуже если бы делала не предсказуемое
И по этому получается как будто умножения чуток больше чем 1/3
Потому что (2^33+1)/3>>33
= (2^33+1)/3/2^33
То что слева в скобках почти равно тому что с права и получается умножения почти на
Одну третию
А почему почти и почему эта однерка нужна потому что без однерки не делится на три
А почему плюс один а не минус потому что если минус будит меньше одной третий и не когда не будит правильно
А с плюс один всегда правильно потомучто остаточек настолько маленький что только если чесло которое хотим разделить оно больше в три раза чем сдвиг то будит не правильно.
Попробуйте вот такие примеры и поймете не какой магий это на самом деле простенько хотя чтобы понять щанело у меня 4 часа.
n это чесло которое хотим разделить на 3
n*11>>5(тут сработает до чесел меньше 96)
n*43>>7(тут до 384)
И так можно игратся магическое чесло это всего лиш любая степень двойки которая делится ровно на три если добавить один поделите это чесло на 3 и получится магическое чесло после умножения любого чесла на него сдвинти вправо на ту степень двойки изначальную и будит это все равно на умножения на треть с маленьким остатком который тоже всегда треть разделеная на тот же сдвиг поскольку этот один который мы плюсовали и по делили на три он добавил нам одну третию
Например послединий мой пример
43 это (128+1)/3
128=2^7
А ровно 1/3 это 42.666.../128
Получаетсь всегда остаток маленький в
0.333333...../128
Приведем к целому
1/384
И так чесло которое привышает или равно 384
Уже результат будит не правильный.
И вот почему в этом магическом чеслу он выбрал такое огромное чесло 0xAAAAAAAB
Сдвиг от которого как раз превышает 4 байта то что int вмешяет и все числа которые хочеш разделить они же в данной функций не привышают int вот и будит правильно.
Там походу все переписать надо руками.по тому что я прочитал из статьй етой так эта ОС просто картинка не чего не работает открывает картинку одну за другой какая разница как называется эта картинка-блокнот или терминал
Если все равно не чего не делает и хорошо что не делает было хуже если бы делала не предсказуемое
Не хочу обидить товарища автора этой статьй но какие там биты старшие младшие о которых говорит.
это простая арифметика.
Или он очень коротко обесняет или до конца не понял сам эту функцию.
Хотя это и к лутчему не до конца обяснять чтобы мы сами до думались
И по этому получается как будто умножения чуток больше чем 1/3
Потому что (2^33+1)/3>>33
= (2^33+1)/3/2^33
То что слева в скобках почти равно тому что с права и получается умножения почти на
Одну третию
А почему почти и почему эта однерка нужна потому что без однерки не делится на три
А почему плюс один а не минус потому что если минус будит меньше одной третий и не когда не будит правильно
А с плюс один всегда правильно потомучто остаточек настолько маленький что только если чесло которое хотим разделить оно больше в три раза чем сдвиг то будит не правильно.
Попробуйте вот такие примеры и поймете не какой магий это на самом деле простенько хотя чтобы понять щанело у меня 4 часа.
n это чесло которое хотим разделить на 3
n*11>>5(тут сработает до чесел меньше 96)
n*43>>7(тут до 384)
И так можно игратся магическое чесло это всего лиш любая степень двойки которая делится ровно на три если добавить один поделите это чесло на 3 и получится магическое чесло после умножения любого чесла на него сдвинти вправо на ту степень двойки изначальную и будит это все равно на умножения на треть с маленьким остатком который тоже всегда треть разделеная на тот же сдвиг поскольку этот один который мы плюсовали и по делили на три он добавил нам одну третию
Например послединий мой пример
43 это (128+1)/3
128=2^7
А ровно 1/3 это 42.666.../128
Получаетсь всегда остаток маленький в
0.333333...../128
Приведем к целому
1/384
И так чесло которое привышает или равно 384
Уже результат будит не правильный.
И вот почему в этом магическом чеслу он выбрал такое огромное чесло 0xAAAAAAAB
Сдвиг от которого как раз превышает 4 байта то что int вмешяет и все числа которые хочеш разделить они же в данной функций не привышают int вот и будит правильно.
Заранее простите то что не совсем ясно обясняю
Сдвиг на 33 а не на 32 потому что магическое число 0xAAAAAAAB оно тупо НЕ 2^32/3
А (2^33+1)/3
Используйте калькулятор и увидите