• Sunday Fun: многонациональный код

    Posted on February 22nd, 2009 Александр Орлов 4 comments

    Изучение интернета на предмет национальных различий в кодировании (по мотивам статьи “Мы – они”) выявило прекрасную статью “Индусский код” в Луркоморье. Не могу ей не поделиться. Небольшой отрывок:

    Пример № 1

    uint i;
    ...
    if (i.ToString().Length == 1)
    {
      ...
    }

    Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется её длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Отрицательные числа переменная типа uint содержать не может. Проверку проходят лишь числа от 0 до 9.

    Пример № 2

    double rest(float a, float b)
    {float res=a*b;
    for (int i=0; i<999999999; i++)
     if (i<=res && i+1>res) {res = res-i; break;}
    return res;
    }

    Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b<0. Также зависимость времени выполнения от величины целой части тоже не радует.

    Алгоритм ресурсоёмок, не очевиден и не поддается сопровождению даже теоретически.

    Fun
     

    4 responses to “Sunday Fun: многонациональный код”

    1. Константин Иванов

      Начинаю подозревать что когда то у нас на работе были индусы… =)

    2. Еще классика:

      bool b;

      if (b.ToString().Length == 4)

    3. Отлично! Тоже индусский?

    4. Антон Непомнящих

      Конечно )

    Leave a reply

    You must be logged in to post a comment.