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

    +131

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    /*
    =====================
    Q_acos
    
    the msvc acos doesn't always return a value between -PI and PI:
    
    int i;
    i = 1065353246;
    acos(*(float*) &i) == -1.#IND0
    
    	This should go in q_math but it is too late to add new traps
    	to game and ui
    =====================
    */

    Астрологи объявили неделю Деда Лайна - количество говнокода и костылей увеличилось вдвое.

    Запостил: gost, 05 Апреля 2014

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

    • float Q_acos(float c) {
      float angle;

      angle = acos(c);

      if (angle > M_PI) {
      return (float)M_PI;
      }
      if (angle < -M_PI) {
      return (float)M_PI;
      }
      return angle;
      }
      PS, а интересно - -1.#IND0 больше 3.14 или нет?
      Ответить
    • Там же число получается 1.0000035762786865.
      Из мана FreeBSD (под рукой был):
      >If: |x| > 1, acos(x) raises an invalid exception and returns an NaN.
      >The acos(), acosf(), and acosl() functions conform to ISO/IEC 9899:1999(“ISO C99”).
      Ответить
      • В военном языке В военное время, значение косинуса может достигать 4-х!
        Тихо, сейчас на запах жаренного прилетит целочисленный Тарас клевать истекающих кровью плавающих сишников.
        Ответить
        • cos(x) = (exp(i*x) + exp(-i*x))/2;
          Пусть t = exp(-i*x).
          t^2 - 2*t*cos(x) + 1 = 0.
          t = cos(x) ± sqrt(cos²(x) - 1).

          x = i * ln(t).
          x = i * ln(cos(x) ± sqrt(cos²(x) - 1)).
          Обычно используют корень с плюсом.

          Тогда если cos(x) = 4, то x = i * ln(4 + sqrt(15)).

          Беда пришла не от Тараса, а с той стороны, откуда не ждали...
          Ответить
          • > t^2 - 2*t*cos(x) + 1 = 0.
            Это как получено?
            Ну и ты забыл что Тарас не умеет в мнимые числа.
            Ответить
          • >Тогда если cos(x) = 4, то x = i * ln(4 + sqrt(15)).
            Дык я чуть ниже формулу привёл:
            http://govnokod.ru/15673#comment224685
            Ответить
            • Спасибо!

              Всё-таки невнимательность — заразная штука. Особенно, когда все комментарии скрыты.
              Ответить
              • Мне уже давно ни спойлеры, ни вайперы не мешают.
                Ответить
      • > raises an invalid exception and returns an NaN
        Одновременно? :)
        Ответить
        • Я думаю, подразумевается это исключение: http://linux.die.net/man/3/fetestexcept
          Ответить
    • > the msvc acos doesn't always return a value between -PI and PI
      > i = 1065353246;
      Да они же упоролись!

      Это двоичное представление числа 1.000004. А арккосинус определен на интервале [-1, 1]. Какого-хуя они вообще от него хотят? :)

      P.S. Упс, WGH выше уже все объяснил.
      Ответить
      • Мнимого представления, очевидно же
        Ответить
      • > арккосинус определен на интервале [-1, 1]
        Кто сказал? Те же люди которые в 1-ом классе говорили, что отнимать от меньшего большее нельзя, или что число 5 не делится на 3, дальше что нет такого числа, квадрат которого будет 2, а потом они сказали что нельзя брать корень из отрицательных, делить на 0 нельзя. И вот теперь что arccos на интервале [-1, 1].
        .
                       _______
        π/2-i*ln(i*z+\/1-z*z )
        Ответить
        • > Кто сказал?
          Ну разумеется все это верно только для вещественных чисел ;) Ибо комплексные координаты и углы в игровом движке не особо помогут...

          Причина ситуации из топика намного прозаичней - накопили слишком много погрешности во флоате, вот оно и распидорасилось. Комплексные числа в борьбе с этим конкретным эффектом, имхо, не помогут.
          Ответить
          • >Причина ситуации из топика намного прозаичней - накопили слишком много погрешности во флоате
            Понятно. Потому в спойлере написано - не призывайте Тараса клевать жаренные жопы.

            Ну во всяких решениях кубических уравнений, и электротехнике помогают, а в итоге-то выходят реальные числа!

            Как видно из формулы выше - диапазон получается из-за корня, но если этот барьер в голове сломан, как и все остальные - на самом деле можно всё, то взяв корень, а потом логарифм получим ответ.

            PS. Я кстати забыл про взятие логарифмов отрицательных чисел, и дробные факториалы.
            Ответить
            • float дискретен, и этот барьер, к сожалению, не в голове и разрывом шаблона не вылечится ;( А если бы флоат был полноценным вещественным числом - никакие комплексные числа никогда бы и не вылезли бы в этой задаче.

              Аналитическая геометрия, емнип, всю жизнь довольствуется вещественными числами. Или я ошибаюсь?
              Ответить
              • Понятно что на практике кривой флоат нужно смазать парой ifов, как сделали эпсилон в пыхе, для циклов по флоатам.

                Но при рендеринге там стандартные действия после acos происходят, так вот интересно, а если взять комплексные, то мнимое i потом не сгорит, на длине вектора например?

                Как в формуле Кардано - даже для вполне реальных корней надо взять джва мнимых корня, с разными знаками, которые потом сгорают.
                Ответить
                • Ответить
                • Ну если это расчет освещения - там, емнип, дальше только умножения да сложения. Так что получится комплексный цвет, который нынешнее оборудование показать не сможет :)
                  Ответить
                  • >>комплексный цвет, который нынешнее оборудование показать не сможет :)

                    Отличная наживка для покупателя и новое, полностью неизведанное направление для макретологов!
                    То они бедные не знают уже что впарить, то аудио 32-bit/192kHz, то 3D видео 8K. А как звучит. Только в наших телевизорах настоящий комплексный цвет.
                    Кстати надо обдумать на досуге математический смысл комплексного цвета
                    Ответить
                    • > математический смысл комплексного цвета
                      Сдвиг волны по фазе по идее. Ну как и любой другой комплексный сигнал - амплитуда + фаза, записанные одним числом.

                      Кстати вполне может иметь смысл для каких-нибудь голографических дисплеев...
                      Ответить
                      • Для 3D-экранов с поляризацией ещё, например.
                        Ответить
                      • Пока ходил в магазин и стоял в очереди думал:
                        Начнём с основ. Свет - это волновой процесс, раз так то сей процесс можно выразить в комплексных числа.
                        Вопрос только в их трактовке.
                        Это можно сделать по разному. Если взять RGB - то как это кодируется в компьютере, то никаких волн тут нет, только три амплитуды-яркости строго фиксированных волн.
                        То же касается CMY - как смешиваются цвета на бумаге.
                        Есть еще такое представление цвета, как YUV - y - luma, то есть яркость (амплитуда), uv - cr и cb - красный и голубой цвет соответственно.
                        Это уже ближе, если закодить яркость как модуль вектора, а цвет как угол то можно представить цвет в комплексной тригонометрической форме, где x - это допустим красный, y - синий, а длина вектора - яркость.
                        Ответить
                        • Никаких цветов в природе не существует ;) Трехмерность цветового пространства - это всего лишь особенности реализации нашего зрения. RGB модель и смешение цветов/красок - аналогично (кстати, смешением можно получить цвета, которых нет в спектре)...

                          Так что можно просто брать яркость за Re и длину волны за Im. Этого вроде бы будет достаточно.
                          Ответить
                          • Не. Тригонометрическая форма ведь.
                            Яркость - длина вектора комплексного числа, а цвет (то бишь длина волна), это угол.
                            Но это только одна точка зрения или способ толкования. Мы сами толкуем цвет как комплексное число, а что значат мнимая и действительная часть можно тоже самим выбрать.

                            Какой физический смысл мнимой части электромагнитной волны - хз, я написал свои размышления, теперь надо спросить что думает гугл.
                            Ответить
                        • Кстати, если инопланетянин (предположим, что он видит в той же области спектра) посмотрит на реальный объект и на его фотку на нашем мониторе - ему же покажется, что наша техника полнейшее говно, которое неправильно воспроизводит цвета, а если он посмотрит на картины - наши художники ему покажутся дальтониками...
                          Ответить
                          • В общем физический смысл действительной части диэлектрической проницаемости - коэффициент преломления, а коэффициент поглощения это и есть мнимая часть волнового вектора.
                            В контексте гейдева - это насколько затухает свет при отражении, прохождении через среду.
                            http://fn.bmstu.ru/data-physics/library/physbook/tom4/ch3/texthtml/ch3_3.htm
                            Ответить
                          • http://toe-kgeu.ru/toe3/418-toe3
                            Для того чтобы охарактеризовать быстроту уменьшения амплитуды падающей волны по мере ее проникновения в проводящую среду, вводят понятие «глубина проникновения».
                            Действительная часть волнового вектора определяет длину волны, а мнимая часть определяет глубину проникновения. Заметим также, что комплексные волновые вектора могут получиться и при действительной диэлектрической проницаемости, то есть поле проникает в проводник на глубину, меньшую, чем длина волны. Это явление называется скин-эффектом. Затухание электромагнитной волны связано с джоулевыми потерями (электромагнитное поле совершает работу по перемещению зарядов, которая затем превращается в тепло).
                            Комплексное число называется коэффициентом распространения волны, действительная часть его соответствует коэффициенту затухания, а мнимая – коэффициенту фазы.

                            То есть от частоты зависит, насколько сильно преломляется волна (как в призме) - то бишь её цвет, а насколько сильно она затухает - я не совсем представляю это в случае телевизора. Может действительно какое-то объемная голографическое изображение в диэлектрически прозрачном материале, потому что комплексные волны возникают только в какой-то среде, но не в пустоте.

                            Кстати затухание электромагнитных волн вполне согласуется и с другой аналогией, о которой я написал ниже:
                            >> в электротехнике мнимые токи создают вполне явные потери энергии в проводах
                            Ответить
                          • > инопланетянин
                            Зачем так далеко ходить, если и на Земле полно таких критиков? :)

                            P.S. А тот скрипт, что автоминусует, умеет открывать скрытые комментарии? Хотя, если что -- можно дописать.
                            Таки новый школомодератор допёк. Поставлю или запилю скрипт, который открывает все комментарии и показывает рейтинг 0.
                            Ответить
                            • >> тот скрипт, что автоминусует, умеет открывать скрытые комментарии?
                              У меня так всегда и работает.

                              $("a.ajax:contains('показать')").click() ;
                              Ответить
                              • Не скрипт, а доска почета прям ;)
                                Ответить
                                • Успел! Так-то я еще удалил больше половины старых, их список стал реально больше самого кода.
                                  Ответить
                                • Жаль, Царь туда попал, а так - да
                                  Ответить
                                  • Ничё, где-то остался и полный, найду покажу сколько их уже было, начиная с компренды и веб-килла (ненастоящего).
                                    > Царь туда попал
                                    На третий день он как-то выдохся и совсем перестал меня смешить.
                                    Ответить
                              • cleaned
                                Ответить
                                • > Если отображать все комменты, спам тоже будет в поле видимости.

                                  Всезависит от порядка действий... если сначала выпилить спам, а потом раскрыть комменты - то все будет норм.

                                  > я признаю свое поражение и покину сайт
                                  Можешь сделать это прямо сейчас и не тратить свое и чужое время на пустяки.
                                  Ответить
                                • >если вообще что-либо можно написать на js не через хак
                                  Нельзя.

                                  >санкция

                                  http://prntscr.com/37epng
                                  Ответить
                                  • cleaned
                                    Ответить
                                    • Сейчас ситуация такая, что тот, кто говорит что-то про санкции, автоматически записывается в клоуны.
                                      Ответить
                      • Но это только один из вариантов, который не учитывает природу света.
                        Есть еще HSL - hue, saturation, цвет, его насыщенность и яркость (амплитуда).
                        Если амплитуда световой волны - это яркость (кол-во фотонов на единицу поверхности), а частота это собственно цвет, который может быть инфракрасным, ультрафиолетом итд.
                        Тогда остается фаза, но сдвиг по фазе между чем и чем? В электротехнике угол фазы - в переменном токе это коефициент мощности.
                        Я вот подумал о том же что @WGH есть еще угол поворота волны в пространстве - полярность, может в неё какой-то смысл вложить?
                        Ответить
                        • Забудем про RGB, CMY, YUV, HSL, потому что у них у всех один и тот же фатальный недостаток: они могут представить только те цвета, которые синтезируются тремя лучами фиксированной частоты (длины волны), а меняется только их яркость.

                          Представим, что мы научились изменять температуру светоизлучающей ячейки. Тогда мы сможем изменять не только яркость каждого компонента цвета, но и длину его волны. Сделав каждый из трёх лучей комплексным (яркость + i * длина волны), мы в пределе можем получить непрерывную гамму (если диапазоны лучей R и G, G и B соприкасаются).

                          Только научившись изменять тон каждой составляющей цвета, мы получим мониторы, которые смогут удовлетворить цветовые запросы всех живых существ.
                          Ответить
                          • Не. Так я начал с RGB и CMY - показать что они несостоятельны. А длина волны (по сути частота, т.к. они зависят друг от друга) - это и есть цвет - во всех диапазонах.
                            И вещественнная его часть - это коэфициент преломления, для разных частот - он разный - прямая зависимость от частоты волны. Потому при прохождении через призму свет раскладывается на спектр цветов (инфракрасный, ультрафиолетовый в том числе).
                            А мнимая часть регулирует степень поглощения, то есть интенсивность.

                            Еще раз:
                            яркость света (lightness) - амплитуда волны
                            насыщенность (saturation) цвета - это фаза, то есть как бы интенсивность цвета (мнимая часть)
                            сам цвет (hue) - частота (реальная часть волны).
                            Модель HSL/HSV имеет в таком свете право на жизнь, не?
                            Ответить
                            • Эта модель описывает только цвета с одним пиком интенсивности в спектре.

                              Для описания «грязных» цветов, т. е. тех, которых нет в радуге, придётся использовать несколько лучей, каждый из которых имеет свои H, S, L.
                              Ответить
                              • >с одним пиком интенсивности в спектре.
                                Получается так, да.

                                А какой есть пример грязного цвета, который не уложится в эту модель?
                                Допустим эта модель и ограничена, но математически она верна:
                                http://en.wikipedia.org/wiki/File:Hsl-hsv_models.svg
                                В том плане что если смотреть на цвет в тригонометрической модели как на угол поворота вектора, то он зациклен.
                                Там по углам красный, и когда мы заканчиваем 360 градусов, то возвращаемся к исходному цвету.

                                Ответить
                              • А еще хорошая аналогия. В трёхфазной сети токи под 120 градусов складываются и сокращают.
                                И в идеале если нагрузка на фазы равна, то на нулевом проводе нет напряжения - ноль . Так и три базовых цвета складываются в белый.
                                Ответить
                          • В рамках же гейдева степень поглощения цвета (мнимая часть) можно рассматривать... как привычный альфа-канал в текстуре. Чем прозрачность не мера того сколько света поглощается/отражается материалом?

                            Пример с телевизором - как на нём альфа-канал отобразить?
                            Я думаю просто мы неправильно смотрим по привчке на телевизор как на излучатель. В излучателе нет степени поглощения.

                            Другое дело экраны по альтернативной технологии, которые просто отражают падающий на них свет, например всякие электронные чернила, или табло.
                            Их цвет - это просто цвет отражающего материала. А степень поглощения, это насколько много света он поглощает, и соответственно отражает обратно. По сути его яркость/насыщенность цвета.

                            Термин экран ведь изначально нес в себе отражающую суть.
                            Ответить
              • Комплексные числа настолько мощный и универсальный инструмент, что и во многих геометрических задачах помогают - емнип какая-то невозможность решение какой-то задачи древности про циркуль и линейку доказывалась именно через них.
                Тем более что геометрическое их выражение все знают - угол и вектор.
                Ответить
                • > Тем более что геометрическое их выражение все знают - угол и вектор.
                  Эээ, не... Комплексная плоскость это же просто удобная визуализация этих чисел. А вот в реале их не увидеть, ибо геометрического смысла у них нет :)

                  И даже если комплексные числа можно применить как инструмент для промежуточных расчетов и доказательств, в геометрии никогда не вылезут комплексные ответы.
                  Ответить
                  • Ну в электротехнике мнимые токи создают вполне явные потери энергии в проводах. Всё зависит от трактовки.

                    Дробный, а тем более мнимый и отрицательный факториал мне тоже когда-то казался бессмысленным безумием, или как предел дзета-функции Римана от отрицательных четных чисел может быть нулем?? Если каждый её член строго положительный и растёт.
                    Ответить
    • показать все, что скрытоТема закрыта.
      Причина: оффтоп.
      Модератор

      Ответить
    • Астрологи объявили неделю школобугурта.
      Ответить

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