1. Си / Говнокод #17244

    +132

    1. 1
    2. 2
    3. 3
    #ifndef M_PI
    #define M_PI		3.14159265358979323846f	// matches value in gcc v2 math.h
    #endif

    Сишкопроблемы.

    Запостил: gost, 03 Декабря 2014

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

    • Что-то не нравится?
      Ответить
    • Вижуалкопроблемы?

      P.S. Хотя, в стандарте сишки оно вроде бы не предусмотрено, и на -std=c89 и -std=c99 M_PI нету даже в gcc.
      Ответить
      • Просто как раз недавно видел срач по поводу необходимости введения констант в стандарт.
        Ответить
        • >срач по поводу необходимости введения констант в стандарт.
          Постоянная тонкой структуры будет?
          Вопрос серъезный. Вдруг фундаментальные константы с течением времени изменятся, как быть тогда? Ждать нового стандарта?
          Ответить
          • Мелкомягкие будут выпускать обновления для win8
            Ответить
          • >Вопрос серъезный. Вдруг фундаментальные константы с течением времени изменятся, как быть тогда? Ждать нового стандарта?
            нет, давайте каждый будет использовать свое пи? =)
            Ответить
      • > в стандарте сишки оно вроде бы не предусмотрено

        и на самом деле. M_PI сидит в позиксе.

        http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html
        Ответить
    • Константы нужно именовать чётко и ясно, чтобы комментарий не требовался:
      #define M_PI_GCC_MATH_H_V2		3.14159265358979323846f

      Вдруг нам в одной программе потребуется несколько M_PI из разных версий компиляторов.

      И вообще, неймспейсов на вас нет!
      Ответить
      • M_PI_IN_CURRENT_UNIVERSE
        Ответить
        • Для хранения трансцендентных чисел дискретный плавающий питух не подойдёт. Нужно изобретать новый тип данных. Например, какой-нибудь pifloat, где числа хранятся как множитель π, т. е. двоичное представление самого π равно единице.
          Ответить
        • Кмк, соотношение e**(i*π)+1=0 портабельно между Вселенными.
          Ответить
        • Не нужна тут константа. Нужна функция univ_get_pi(), и линковать её нужно динамически чтобы бинарник работал во всех вселенных
          Ответить
          • if(M_PI != 3.14159265358979323846) {
               fputs("Sorry, wrong universe\n", stderr);
               fputs("Try to run this program in a universe where M_PI = 3.14159265358979323846\n", stderr);
               abort();
            }

            На внимательность
            Ответить

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