[personal profile] a7sharp9

Что делает Серьёзный Программист (далее - СП), когда ему нужно разделить целое число пополам? Конечно, использует оператор сдвига на один бит вправо.

Что делает тот же самый СП, когда ему нужно увеличить число в полтора раза? Выливает воду из чайника, смотри предыдущую задачу: берёт уполовиненное число и складывает его с собой.

Выглядит это так:

x = x + x >> 1;

К сожалению, эта строчка находится в куске кода, который решает, на сколько увеличить размер расширяемого массива при релокации.
К ещё большему сожалению, в этом куске кода (потому что П - С, и он учитывает краевые ситуации) имеется также обработка случая, когда x==1, состоящая в том, что если x не изменился, его следует увеличить на единицу.

Таким образом, поскольку приоритет у плюса больше, чем у сдвига (а на приоритеты операций СП никогда внимания не обращают), строчка не имеет никакого эффекта вообще (x умножили и тут же разделили на 2), срабатывает краевой случай, и массив переезжает в памяти с каждым новым элементом.

Программа вместо двух часов работает трое суток, замедляясь всё больше, и до конца так и не доходит.

Люди, умножайте на полтора.

Date: 2005-03-15 07:15 pm (UTC)
From: [identity profile] kuzjavyj.livejournal.com
подметальщик, наверное хорошо работает, быстро. И защита, да, иначе отчего бы она замедлялась.
Фрагментировать вам, не перефрагментировать.
Но красивая же ошибка!
а тут сидишь, и даже не хочется про ошибки рассказывать, потому - долго, нудно, и некрасиво.

Date: 2005-03-15 07:19 pm (UTC)
From: [identity profile] a7sharp9.livejournal.com
Замедляется-то из-за того, что всё большие и большие массивы по памяти гоняет. Там несколько миллионов элементов. Кстати, полный garbage collection не делает, обходится как-то частичным.

Очень красивая, угу. Я бы предпочёл нудно поскучать, чем её за хвост ловить. Две недели ловил. Она же на небольших задачах в профиле не вылезает, обязательно надо дать хорошенько раскрутиться.

December 2018

S M T W T F S
      1
2345678
9101112131415
161718192021 22
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 31st, 2026 04:58 pm
Powered by Dreamwidth Studios