Здравствуйте, мыщъх, Вы писали:
М>и где там определение? например, делим длину на два. нужно ли писать М>#define half 2
боже упаси. #define оторвет руки сам, без нашего участия.
М>или можно писать /2 ? M>или вот... for (idx=0;idx<len;idx++) это нормально? или неявный 1 нужно заменить на one, 0 -- start_index, len -- end_index
А вот так низзя. Семантика for менялась как минимум 6 раз. Единственно кошерный способ это while (idx < len). Смайликов не ставлю из принципа.
М>вы же не можете не признать, что end_index это лучше? for (idx=start_index;idx==end_index;idx+=one), где end_index = len — one, правда, тут нужно еще предусмотреть случай когда len == 0, где 0 определен как empty_xxx (вместо ххх -- название сущности).
Еще кошернее, while (begin != end). Ну, вы поняли.
М>так все-таки где граница магичности? а как на счет магических алгоритмов? смотрите в программу и видите в ней 1 + х и думаете, что это наверное ошибка, т.к. тут должно быть е**х, но программа работает. почему? вопрос в самом деле интересный, т.к. при копи-пасте она проработает недолго и быстро сломается. если х это не аргумент функции и если х удовлетворяет определенным условиям неизвестным вам, то оно... работает. причем очень шустро. допустим, функция не может возвращать ошибку и не имеет права кидать исключений, а х -- вычисляется в рантайме -- тут ведь даже проверку на соответствие этим условиям не вставишь...
А вот такого я не встречал. Пример можно?
М>а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно. для k == 8 не работает. но k никогда не равно 8, т.к. не соответствует никакой физической реальности, но работает для 7 и 9. даже для -1 работает. во. а теперь скажите мне -- что оно считает. а оно определенно что-то считает.
Выдыхай... что-нибудь соответствующее какой-нибудь физической реальности, желательно.