ДействиеСценарий / Говнокод #12654 Ссылка на оригинал

0

  1. 1
  2. 2
for (var i:int = 0; i < _dropCount;_dropCount--)
   // todo

Запостил: Cpp Cpp, (Updated )

Комментарии (12) RSS

  • 2^31+1 итерация при любом положительном _dropCount...
    Ответить
        • Это скорее доказывает говнистость кода: если уж @bormand, умеющий парсить point-free хацкел-код, неправильно понял цикл с первого взгляда, следовательно, цикл - говно.
          Ответить
  • почему переменную цикла называли i? потому что iтератор... а здесь... разрыв шаблона )
    Ответить
  • слишком молод что б наложить, сделайте это за меня :
    public long getLong(){
    return (long) ((getDouble()-353)*20*50*10);
    }


    "оптимизирует" с PG и компилит в:
    public long getLong(){
    return (long)(20.0D * 50.0D * 20.0D * (this.getDouble() - 353.0D));
    }


    c return (long) ((getDouble()-353)*(20*50*10));
    всё нормально
    Ответить
    • Проблема в том, что 10 превратилось в 20? Или это тупо опечатка, а проблема в том, что константы не свернулись в одну?

      P.S. Судя по стилю именования getDouble и public перед методом - это жаба. Версия компилятора какая? Чем изучали выхлоп?

      PG - ProGuard или я туплю?
      Ответить
      • P.P.S. Если мне не изменяет память, сам javac никогда ничего не оптимизирует, и генерит код дословно, как написано, перекладывая всю оптимизацию на JIT.

        А вот почему ProGuard не стал перемножать константы - х.з. Его ман утверждает, что одна из его оптимизаций "Evaluate constant expressions".
        Ответить
        • P.P.P.S. Про javac наврал, в версии со скобками он сам умудряется объединить 20*50*10 в 10000.

          Не хотят пользоваться коммутативностью и ассоциативностью умножения 😉
          Ответить
          • >проблема в том, что константы не свернулись в одну
            да.
            опечатка была - вместо одного значения 20.0D должно быть 10.0D
            Java и ProGuard и всё под Android
            Ответить
    • 1) Не эквивалентно коду ОП'а при отрицательных _dropCount.
      2) Если _dropCount юзался внутри цикла, то декремент надо поставить после some logic.

      Полный эквивалент:
      while (_dropCount > 0) {
          // some logic
          _dropCount--;
      }
      Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8