Си диез / Говнокод #10055 Ссылка на оригинал

0

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

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

Запостил: koodeer koodeer, (Updated )

Комментарии (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 теряются последние значащие цифры
      Ответить
    • Таки в bc лучше, можно корректно вычислить (без плясок с decimal).
      Ответить
  • Неудивительно что у пацанов в Лондоне биржа упала. Может там синусы и не использовались, но показательно как для платформы.
    Ответить
    • Дело даже не в платформе, а в сопроцессоре. В дельфах например даже сделана костыльная обёртка, чтобы для слишком больших чисел возвращать не sinx=х, а sinx=0
      Ответить
      • Почему программист использующий язык, который работает на виртуальной машине должен знать о багах сопроцессора?!
        В джаве этому уделили особое внимание. Даже эмуляцию пониженной точности замутили в виде strictfp.
        >этот боянный баг достался всем языкам
        В жабе всё норм.
        Ответить
    • $ 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
        Ответить
      • Всем спасибо, стыдно, что поленился сам проверить.
        // Мигель радует не меньше мс - все правильно сделал.
        Ответить
      • Вывод Console.WriteLine, оказывается, зависит от настроек локали. Кака́я контекстозависимость )))
        Ответить
    • Не менее интересный вопрос: что выдаст в mono на ARM платформе?
      Ответить
  • Известная тема. Было даже как-то на говнокодике. Тарас помнит.
    Ответить
  • ходит слух, что тригонометрические функции из класса Math принимают аргумент в радианах, поэтому long.MaxValue надо сначала умножить на pi/180.
    как-то так...
    Ответить
    • >баг достался всем языкам
      B прежде чем так публично обосраться, мог и проверить
      javascript:alert(Math.sin(1e+100));

      Мне интересно кто тебя плюсовал?
      Ответить
      • > кто тебя плюсовал
        наверняка завёл пару ботов, которыми плюсует себя и минусует меня. Пока страйко не запилит фичу просмотра всех поставивших плюс/минус наверняка узнать не получится
        Ответить
        • Реквестирую такую фичу, это доставит тонны драмы и ненависти.
          Ответить
          • Пушкоф очень давно хотел такое, вроде даже был готов юзать на платной основе
            Кстати пока я не начал тут писать у него было 3 плюса и вообще никто не минусовал!
            А после подробного разбора разъясняющий глупость этого дятла, то его резко заминусовали.
            Кстати, проверьте кто-нибудь 1С.
            Ответить
          • Мне иногда приходят мысли запились свой говнокодик с markdown и фичами, чтоб домики набигали и караваны можно было грабить. Есть идея выкладывать не только говённый код, но и код, показавшийся "красивым" (т.е. замутить на сайте два раздела: один для плохого кода в коричневых тонах, другой - для хорошего, в синих).
            Ответить
    • Но мало того, в охаиваемом VB6 (заметьте от MS) на аргументах выше 2^63, сюрприз ... вылетает exception. Наверняка это самое правильное поведение.
      В SQLе тоже всё норм.
      Смотри сюда, овца, ты тупорылая, даже пхп:
      http://ideone.com/vjI8X
      Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8