1. C# / Говнокод #6107

    +136

    1. 1
    particleEmitter.particleEmitter.particleEmitter.particleEmitter.particleEmitter.particleEmitter.particleEmitter.particleEmitter.particleEmitter.emit = Mathf.Sin(Random.value*Mathf.PI*2) <= 1;

    Строчка из кода в Unity3D.

    Запостил: semens, 28 Марта 2011

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

    • не верю
      Ответить
    • цепная реакция?
      Ответить
    • Поколение гигагерцев уже не признаёт простого [Tt]rue, ога.
      Ответить
    • Насколько я знаю, FPU для очень большого аргумента возвращает сам аргумент при попытке посчитать синус.
      Правда, в этом ГК такого аргумента не бывает.
      Ответить
      • > для очень большого аргумента
        наверное всё-таки для оч.маленького. учите пределы :)
        Ответить
        • Я не про математику. Ключевое слово моего поста: FPU.
          Ответить
          • И что, FPU не подчиняется законам математики? Конкретнее можно услышать, в чем там дело?
            Ответить
            • Для слишком больших чисел сама погрешность представления числа делает бессмысленным понятие синуса.
              Для 1е+20, например, возвращается 1е+20.
              Ответить
              • т.е. всё таки война?
                Ответить
                • минусаторам рекомендую прочистить мозги тригонометрией :)
                  Ответить
                  • что вы, тогда точно начнется цепная реакция )
                    Ответить
                    • Да я бы только рад был, если бы люди наконец поняли, что синус не может быть больше 1 по модулю, не зависимо от величины аргумента. А то несут какую-то чушь, а потом ещё минусуют по незнанию, но ведь если что - всегда можно сказать - "блядь, это была ирония" :)
                      Ответить
                      • нуу, еще же есть, например, гиперболический синус = )
                        Ответить
                      • System.out.println(Math.sin(Math.sqrt(-1))<=1);
                        Ответить
                      • var
                          f: extended;
                        begin
                          f := 1e+20;
                          asm
                            fld f
                            fsin
                            fstp f
                          end;
                          writeln(f);
                        end.

                        вывод:
                        1.00000000000000E+0020

                        Так что минусы ты получаешь заслуженно, теоретик хуев.
                        Ответить
                        • > Для слишком больших чисел сама
                          Это только значит, что говнокод оказался увековечен в кремнии. Синус - периодическая функция с периодом 2π. Добро пожаловать в Омск.
                          Ответить
                        • Говно твой паскаль и вставки асмовые :) Научился бы лучше обосновывать почему так происходит, а не кормить хуями. Дырка кроется в конкретной асмовой fsin, и дело там не в погрешности представления, а в переполнении при разложении в ряд. Возьми нормальную реализацию синуса, а не простую команду fsin и получишь правильное значение. Кстати, возможно, что даже если напишешь на паскале без асма получишь адекватное значение. На С++ между прочим синус правильный.
                          Ответить
                          • > Говно твой паскаль и вставки асмовые

                            Покушай хуйцов.

                            > Научился бы лучше обосновывать почему так происходит, а не кормить хуями. Дырка кроется в конкретной асмовой fsin, и дело там не в погрешности представления, а в переполнении при разложении в ряд.

                            А чего обосновывать. Синус для числа с такой погрешностью вообще смысла иметь не может - это число, как-то распределённое по -1,1

                            > Кстати, возможно, что даже если напишешь на паскале без асма получишь адекватное значение.

                            На Дельфе без асма я ноль получу.
                            А вот ГНАТ, например, пытается что-то посчитать.

                            sin(x)
                              -5E+20	0.390971485254262387
                              -4E+20	0.838166640524810428
                              -3E+20	0.377695719785472911
                              -2E+20	0.47675243555251814
                              -1E+20	-0.245929250615260329
                              0	0
                              1E+20	0.245929250615260329
                              2E+20	-0.47675243555251814
                              3E+20	-0.377695719785472911
                              4E+20	-0.838166640524810428
                              5E+20	-0.390971485254262387


                            Так вот, я сразу, в первом посте конкретно сказал, в чём прикол. Ты сразу стал в снисходительной форме обвинять меня в незнании элементарных пределов. Ты первый наехал.
                            Ответить
                            • > элементарных пределов
                              тригонометрические функции и их св-ва проходят на один пубертатный период раньше
                              Ответить
              • Console.WriteLine(Math.Sin(1e20)) выводит 1E+20

                Спасибо! Никогда бы не в голову не пришло читать инструкцию к синусам.
                Ответить
                • читайте мануалы, там черным по белому сказано:
                  Допустимы значения d в диапазоне от приблизительно -9223372036854775295 до приблизительно 9223372036854775295. 
                  Для значений за пределами этого диапазона метод Sin возвращает значение d неизменным и не выбрасывает исключение.
                  Ответить
                  • фу, какая гюсская цитата

                    флаг C2 выставляется
                    Ответить
                    • не совсем черным по белому получилось :)
                      Ответить

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