1. C++ / Говнокод #7604

    +152

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    int main()
    {
      unsigned long l = 0xffc00000;
      float f1,f2;
      memcpy(&f1,&l,4);
      memcpy(&f2,&l,4);
      if(f1!=f2)printf("OH, SHI~!\n");
      if(f1!=f1)printf("Facepalm!\n");
    }

    >Давно хотел провести эксперимент, вот только сейчас руки дошли.
    Лог программы:
    OH, SHI~!
    Facepalm!

    >Кто-нибудь знает причину подобного феномена?
    Эксперемент не мой и я знаю причину такого поведения. Так что не плохой вопрос для собеседования к новичкам.

    Запостил: Говногость, 21 Августа 2011

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

    • Не верю.
      Ответить
    • Думаю, причина в том, что при внутреннем представлении действительных чисел маска 0xFFC00000 соответствует значению NaN, а, согласно стандарту IEEE 754, NaN != NaN. Поэтому ни одно из условий в программе не дает true. Если изменить значение константы, например, на 0xAAAAAAAA, все будет ок.
      Ответить
      • А это необходимо знать(про соответствие)?
        Ответить
        • Запоминать битовые маски — это, по-моему, уже перебор. Главное — знать, что существует такой стандарт, и что в нем есть такие понятия, как +0, -0, +∞, -∞, NaN, округление к ближайшему четному и т.п. На собеседовании я бы лично такую программу давал разве что в том случае, если человек сидит за компьютером и у него есть IDE и дебаггер.
          Ответить
          • >у него есть IDE и дебаггер.
            У всех настоящих программистов есть IDE и дебагер.
            Ответить
      • ЧуднО. Век живи, век учись...
        Ответить
        • Да, не говнокод конечно, но данные полезные.
          Ответить
    • 64-bit, big endian — не работает. ЧЯДНТ?
      Ответить
    • Говнокод вместо приведения типа использовать мемсру()
      Ответить
    • код внимательно не смотрел @ тред не читал.
      NaN?
      >OH, SHI~!
      >Facepalm!
      совершенно неуместное использование сленга.

      мозги_съедены_двачемлурком.жпег
      Ответить

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