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

    +122

    1. 1
    Console.WriteLine(Math.Sin(long.MaxValue));

    Выведет 9,22337203685478E+18

    Запостил: koodeer, 26 Апреля 2012

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

    • Я, конечно, понимаю про военное время, но не настолько же!
      Ответить
    • Сталкивался с подобной ситуацией в Fortran, вручную приводил значение к интервалу [0, 2π)
      Ответить
    • #include <stdio.h>
      #include <limits.h>
      #include <math.h>
      
      int main()
      {
          printf("%g\n", sin(LONG_MAX));
      }

      -0.724917 хммм...
      Ответить
    • string.Format("{0} {1} {2} {3}", Math.Sin(long.MaxValue - 512), Math.Sin(long.MaxValue - 513), Math.Sin(long.MaxValue - 514), Math.Sin(long.MaxValue - 555))
      "0,987341891314351 0,987341891314351 0,987341891314351 0,987341891314351"
      :(
      Ответить
      • таки неудивительно: при приведении от long к double теряются последние значащие цифры
        Ответить
    • в жабе кстати нормально
      http://ideone.com/U3EH4
      Ответить
      • Таки в bc лучше, можно корректно вычислить (без плясок с decimal).
        Ответить
    • Неудивительно что у пацанов в Лондоне биржа упала. Может там синусы и не использовались, но показательно как для платформы.
      Ответить
      • Дело даже не в платформе, а в сопроцессоре. В дельфах например даже сделана костыльная обёртка, чтобы для слишком больших чисел возвращать не sinx=х, а sinx=0
        Ответить
        • Почему программист использующий язык, который работает на виртуальной машине должен знать о багах сопроцессора?!
          В джаве этому уделили особое внимание. Даже эмуляцию пониженной точности замутили в виде strictfp.
          >этот боянный баг достался всем языкам
          В жабе всё норм.
          Ответить
    • В mono воспроизводится?
      Ответить
      • $ cat 1.cs
        using System;
        class main {
            public static void Main() {
                Console.WriteLine(Math.Sin(long.MaxValue));
            }
        }
        $ mcs 1.cs
        $ chmod +x 1.exe
        $ ./1.exe 
        9,22337203685478E+18

        Отличная совместимость!
        Ответить
        • Вспомним давно забытый проект «Portable.NET» (они осилили только 2.0, до четвёрки не дошли).
          cscc 1.cs
          ilrun a.exe

          Выводит:
          9.223372036854776E+018
          Тот же экзешник, запущенный через микрософтовскую среду:
          9,22337203685478E+18
          Тот же экзешник, запущенный через «Mono»:
          9,22337203685478E+18
          Ответить
      • Не переживай, технология кроссплатформенная:
        http://ideone.com/cuQzl
        Ответить
        • Всем спасибо, стыдно, что поленился сам проверить.
          // Мигель радует не меньше мс - все правильно сделал.
          Ответить
        • Вывод Console.WriteLine, оказывается, зависит от настроек локали. Кака́я контекстозависимость )))
          Ответить
      • Не менее интересный вопрос: что выдаст в mono на ARM платформе?
        Ответить
    • Writeln(Format('%g', [Sin(MaxLongint)]));
      -0,724916555144556
      Ответить
    • Известная тема. Было даже как-то на говнокодике. Тарас помнит.
      Ответить
      • Вот он, эпичный тред http://govnokod.ru/6107
        Ответить
        • Спасибо! Я тот тред пропустил.
          Ответить
        • О как, получается это баг процессора. Спасибо за ссылку!
          Ответить
        • Да, кстати, что там ГНАТ делает с синусом большого числа, я так и не понял. Вернее, не смотрел.
          Ответить
          • По идее можно брать тупо рандом в диапазоне -1.0 .. 1.0 :)
            Ответить
    • ходит слух, что тригонометрические функции из класса Math принимают аргумент в радианах, поэтому long.MaxValue надо сначала умножить на pi/180.
      как-то так...
      Ответить
    • показать все, что скрытоу вас синусит, этот боянный баг достался всем языкам
      Ответить
      • Ох не пиздела бы твой твоя голова, того в чем не разбирается и не болела бы потом жопа.
        В нормальных языках всьо чьотко.

        http://ideone.com/WgDXd
        http://ideone.com/w4n9P
        http://ideone.com/U3EH4
        Ответить
      • >баг достался всем языкам
        B прежде чем так публично обосраться, мог и проверить
        javascript:alert(Math.sin(1e+100));

        Мне интересно кто тебя плюсовал?
        Ответить
        • > кто тебя плюсовал
          наверняка завёл пару ботов, которыми плюсует себя и минусует меня. Пока страйко не запилит фичу просмотра всех поставивших плюс/минус наверняка узнать не получится
          Ответить
          • Реквестирую такую фичу, это доставит тонны драмы и ненависти.
            Ответить
            • Пушкоф очень давно хотел такое, вроде даже был готов юзать на платной основе
              Кстати пока я не начал тут писать у него было 3 плюса и вообще никто не минусовал!
              А после подробного разбора разъясняющий глупость этого дятла, то его резко заминусовали.
              Кстати, проверьте кто-нибудь 1С.
              Ответить
            • Мне иногда приходят мысли запились свой говнокодик с markdown и фичами, чтоб домики набигали и караваны можно было грабить. Есть идея выкладывать не только говённый код, но и код, показавшийся "красивым" (т.е. замутить на сайте два раздела: один для плохого кода в коричневых тонах, другой - для хорошего, в синих).
              Ответить
              • > запилисть
                fixed
                Ответить
              • А мне иногда приходят мысли, что пора перевести проект в статус open-source. Потому что идей дохуа, а ничего не реализуется.
                Ответить
              • с markdown и api лёгкого поведения
                Ответить
              • Идея хороша. Нет, этот говнокодик очень уютный, но тут нет нескольких удобных фич и слишком ужасные атаки ракоты. Я думаю, вполне можно запилить няшокод и немного поспамить ссылочками.

                P.S. Да и этот сайт пару дней в месяц практически регулярно лежит, то не найден, то гейт шлёт нафиг. А это как-то тоскливо.
                Ответить
      • Но мало того, в охаиваемом VB6 (заметьте от MS) на аргументах выше 2^63, сюрприз ... вылетает exception. Наверняка это самое правильное поведение.
        В SQLе тоже всё норм.
        Смотри сюда, овца, ты тупорылая, даже пхп:
        http://ideone.com/vjI8X
        Ответить
    • Гамон!
      Ответить

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