1. Куча / Говнокод #27400

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    %% Generates a Normal-distributed random variable using Box-Muller method
    %% from: https://github.com/basho/basho_stats/blob/develop/src/basho_stats_rv.erl
    -spec rnd_normal(integer(), integer()) -> non_neg_integer().
    rnd_normal(Mean, Sigma) ->
      Rv1 = random:uniform(),
      Rv2 = random:uniform(),
      Rho = math:sqrt(-2 * math:log(1-Rv2)),
      abs(trunc(Rho * math:cos(2 * math:pi() * Rv1) * Sigma + Mean)).

    Это норма.

    Запостил: CHayT, 07 Мая 2021

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

    • SEO: какое распределение )))
      Ответить
      • > какое распределение

        А что с ним? Вроде похоже на формулу с википедии.
        Ответить
        • abs() (взятие модуля) не смущает?
          Ответить
          • Мне почему-то показалось, что Mean == 0. Но походу нет и там вообще какая-то забавная хрень...
            Ответить
    • > non_neg_integer()
      > Normal-distributed random variable
      Что-то тут ня так...
      Ответить
    • Кстати, зачем в Erlang делят функции на числа?
      Ответить
      • Манглинг по количеству аргументов.
        Ответить
        • Понятня, спасибо. Я думала, в Erlang перегрузки по типу тоже есть, а ня только по количеству аргументов.
          Ответить
      • Где ты такое видишь? Если ты про 'fun kurochka:kok/1', то это взятие ссылки на функцию, после / идёт arity.
        Ответить
        • Понятня, спасибо. Я думала, в Erlang перегрузки по типу тоже есть, а ня только по количеству аргументов.
          Ответить
          • Так в нём динамическая питуизация-с.
            Правда в отличие от питона, аннотации типов действительно статически проверяются.
            Ответить
            • А https://erlang.org/doc/reference_manual/typespec.html что такое?
              Ответить
              • Заапдейтил коммент. Это для статического анализатора ``Dialyzer''. Он довольно круто умеет разгребать
                foo(A) when is_integer(A) ->
                  kukareku;
                foo(kurochka) ->
                  koko.
                -подобную дичь.
                Ответить
                • То есть как в Python с typing? Понятня.
                  Ответить
                  • В питоне эти аннотации только для красоты, вроде.
                    Ответить
                    • Нят, есть mypy, pyright и прочие анализаторы, которые проверяют типокорректнясть. Но работают они криво и косо, конячно.
                      Ответить
                • > foo(A) when is_integer(A) ->
                  Что-то мне это няпоминает... А, точня!
                  auto foo(T A) -> std::enable_if_t<std::is_integral<T>> {}
                  Ответить
                  • В Nim что-то подобное есть! Там тоже для ветвления во время компайл-тайма можно использовать when, который ведёт себя как if.
                    Ответить
    • Оттуда же:
      %% @doc Returns `true' if `Op1' precedes `Op2'
      %%      according to their median time.
      -spec cmp_opmedian(op(), op()) -> boolean().
      cmp_opmedian(Op1, Op2) ->
        (Op1#op.start_time + Op1#op.end_time)/2 <
          (Op2#op.start_time + Op2#op.end_time)/2.

      Какой ордеринг )))
      Ответить

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