"PHP" / Говнокод #18111 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
<?php

$startNumber = 0;

function LittlePart($BigPart, $startNumber) {
  $i = -3;
  $number = $startNumber * M_PI + ($i - 1);
  do {
    $number += M_PI;
    echo $BigPart . ' + (' . $i . ') = ' . number_format($number, 2, ',', ' ') . PHP_EOL;
    $i++;
  } while ($i <= 3);
}


function MidPart($BigPart, $startNumber) {
  $i = -3;
  $number = $startNumber * M_PI + ($i - 1);
  do {
    $number += M_PI;
    LittlePart ($BigPart . ' + (' . $i . ')·π', $number);
    $i++;
  } while ($i <= 3);
}


function QuadradPart($BigPart, $startNumber) {
  $i = -3;
  $number = $startNumber * M_PI + ($i - 1);
  do {
    $number += M_PI;
    MidPart ($BigPart . ' + (' . $i . ')·π²', $number);
    $i++;
  } while ($i <= 3);
}

function CubePart($BigPart, $startNumber) {
  $i = -3;
  $number = $startNumber * M_PI + ($i - 1);
  do {
    $number += M_PI;
    QuadradPart ($BigPart . '(' . $i . ')·π³', $number);
    $i++;
  } while ($i <= 3);
}


CubePart('', 0);

Система счисления по основанию π. Пока с целыми числами.

http://ideone.com/EUYEKA

Запостил: inkanus-gray inkanus-gray, (Updated )

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

  • > EUYEKA
    Какой ID )))
    Родственник начальника ideone?
    Ответить
    • Самому понравилось. Кстати, никто не заметил ошибку. В инкременте должна быть единица, а не M_PI. Говнокод же!

      Урезанная и исправленная версия: http://ideone.com/hAX9hi
      Ответить
      • А пичиму это у вас, товаришь, минус может перед цифрой стоять а не только перед числом?
        Ответить
        • Потому что я не знаю правил записи чисел в системах счисления с ненатуральным основанием.
          Ответить
          • просто тут нужна не цифирная запись, а обобщенная с подчеркиванием сверху.(множество то не счетно) Один знак - это число от ноля до Пи невключительно.
            покажу как умею
            ______________
            2,45 3,06 1,2
            Ответить
            • А однозначную запись (хотя бы как в системах с натуральным основанием: пока запись не бесконечна, всё однозначно) тут можно ввести?
              Ответить
              • надо подумать.
                1 = {1/пи} {1/пи^2, 0} {1/пи^3, 0,0} ...
                Не одназначность возникает при использовании чисел меньших 1
                мы может ввести ограничения для всех числе, кроме первого, что бы они были больше 1, тогда N ое число будет содержаться в диапазоне от Пи^N до Пи^(N+1) не включительно. В этом случае запись будет однозначной. кажется
                Ответить
  • Кстати, в пи-системе с целыми цифрами можно только перебирать все коэффициенты, чтобы получить красивую короткую запись числа, или есть какое-то более оптимальное решение?
    Ответить
    • Всё, как обычно: делим на основание системы. Я не уверен, что в случае иррационального основания можно считать остатки, поэтому делаем так:
      1. Считаем логарифм по основанию π.
      2. Округляя логарифм в меньшую сторону, получаем количество знаков. Пусть это будет n.
      3. Поделив число на π в степени n, и округлив вниз, получим старшую цифру. Пусть она равна M.
      4. Вычитаем M, умноженное на π в степени n, из числа и повторяем процедуру.

      P.S. Ах, да, алгоритм не учитывает возможность записи с отрицательными цифрами. Для них оптимального алгоритма не знаю.
      Ответить
      • Подсказка: тут хитрость в округлении. Округлив вверх, а не вниз, можно получить другой вариант разложения.
        Ответить
        • > другой вариант разложения.
          Т.е. выходит, что можно 2^n вариантов рассмотреть?

          Хотя, если округлять вниз, а потом корректировать (округлять вверх при желании) только последнюю цифру, получается годно (коротко и не очень затратно):
          1024.X = pi6 + 2pi3 + 2pi-1 // вышеописанный алгоритм
          1024.X = - pi - pi3 + pi4 + pi6 // подбор, цифры из {-1, 1}
          X.1024 = pi-8 + pi-6 + pi-2 // подбор, пи-стиль, цифры из {-1, 1}
          Ответить
    • Спасибо за идею. Но мне их описание показалось сложным. Что можно изучить из того, что полегче?
      Ответить

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

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

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


    8