Ответы пользователя по тегу Математика
  • Как сделать отклонение для вектора?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Умножим наш point на r.
    2. Повернём (rx, ry, 1) так, чтобы (0,0,1) → d. Ищите эту матрицу где-то в движке: вы имитируете разброс оружия — так что это будет матрица поворотов камеры. Если прицел не в центре экрана (бывает для всяких там гранатомётов) — применяем ту же самую поправку. Если видовая матрица и матрица наводки развязаны (бывает в сетевой игре) — то брать матрицу наводки, понятно.
    3. Снова нормализуем.
    Ответ написан
    Комментировать
  • Как записать это выражение?

    @Mercury13
    Программист на «си с крестами» и не только
    Добавлю от себя: десятичная система счисления справа не имеет смысла: нет такого понятия, как десятичный плюс. Слева — двоичная система счисления, справа — РОДНАЯ, в которой мы проводим расчёты, будь это двоичная, десятичная, фибоначчиева или просто чёрточки на песке.

    Перед нами самое обычное определение позиционной системы счисления. Слева индекс имеет смысл (мы указываем основание), справа не имеет (мы работаем в «родной» для нас системе).

    UPD. Мы, конечно, можем написать: (123 + 456)10, что значит: все числа в скобках в десятичной системе. Только в вашем примере в скобках нет ни многозначных чисел, ни сверхдесятичных систем счисления (B16=11), чтобы это имело какой-то смысл. Цифра два — она и в Африке два: мы договорились, что она значит || независимо от системы счисления. Если, конечно, не делать из неё многозначные числа.

    Да, на языке программирования вы записали правильно, хотя чаще на компьютерах используется схема Горнера:

    ((1) * 2 + 1) * 2 + 0

    Во многих языках есть запись 0b110.
    Ответ написан
    7 комментариев
  • Как доказать, что если множество (G \ H) ∪ {1} — подгруппа G, то либо H = {1}, либо H = G?

    @Mercury13
    Программист на «си с крестами» и не только
    Обозначим обратный через x*, так писать проще.

    Берём элемент h∈H, ≠1 и другой g∉H, ≠1. Заметим, что:
    • h*∈H, ≠1, а g*∉H, ≠1
    • gh, hg, g*h и т.д. в любых сочетаниях ≠1.

    Вариант первый. x=gh∈H. Множим справа на h*, и получаем xh* = ghh* = g. Слева штуки из H, справа нет — H не замкнута.

    Вариант второй. x=gh∉H. Множим слева на g*, и получаем g*x = g*gh = h. Слева штуки из нашей подгруппы (G \ H) ∪ {1}, справа нет. Так что подгруппа явно не замкнута.

    Для полугрупп с единицей, о которых ты пытался говорить, это НЕ ТАК. Как известно, у любой конечной полугруппы есть идемпотент — тем лучше. Пусть G = B², H={00, 10}, операция — побитовое ИЛИ, E=00. Тогда множество (G\H)∪E={00,01,11} явно замкнуто относительно ИЛИ. (Я пытался вводить ажурные B и единицу, а система стирает.)
    Ответ написан
    Комментировать
  • Почему не существует не итерационных/точных методов для вычисления корня из числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё крайне просто.
    Потому что, начиная с рационального числа и проводя четыре арифметических действия, +−×: , мы будем оставаться в поле рациональных чисел. А корень в большинстве случаев иррациональный.
    Мы можем получить лишь рациональное число, достаточно близкое к нашему корню.
    И все «нормальные» методы вычисления корня работают так: если ещё немного повычислять, можно получить более точный корень. То есть итерационные.

    Пример НЕитерационного метода предложили Ын, Уолш и Таролли, но более он известен по игре Quake III: придумать приближение логарифма, разделить на 2 и обратить это самое приближение. Но этот метод не масштабируем: если точности не хватает, придётся брать в руки какой-нибудь метод Ньютона и дотягивать точность. Ну или придумывать более точное приближение логарифма — исходное было всего лишь прочтением компьютерного дробного как целого числа. То есть придётся рубить его на мантиссу и порядок, порядок брать как есть, а мантиссу преобразовывать каким-то многочленом (если читать дробное как целое, то наш многочлен — банальная линейная функция, log₂(1+x)≈x).

    А лучше порядок превратить в несмещённый, поделить надвое, вернуть опять к смещённому, и остаётся только найти приближение — многочленом или таблицей — для x∈[1,4).

    Другой НЕитерационный алгоритм — банальная таблица. Каким-то раком предвычислить таблицу, а то, что в таблицу не попадает, приблизить любым доступным методом, да хоть линейной интерполяцией или многочленами Эрмита.
    Ответ написан
    Комментировать
  • Как найти расстояние от точки до вектора?

    @Mercury13
    Программист на «си с крестами» и не только
    Откуда начинается вектор?
    Если вектор AB и точка C, то расстояние — это ортогональная СОСТАВЛЯЮЩАЯ |AC×AB| / ||AC||·||AB||.
    a×b — это косое произведение векторов ax·by−ay·bx. В 2D это скаляр. Если убрать модуль в числителе, получится знаковое расстояние — плюс с одной стороны и минус с другой.
    ||a|| — длина вектора sqrt(ax²+ay²). Если есть функция hypot, используй её.
    Ответ написан
    Комментировать
  • Как сократить данную операцию?

    @Mercury13
    Программист на «си с крестами» и не только
    Сначала законы де Моргана. Потом !!B=B, и т.д.
    Первая часть даст B || !C. Вторая — !B || C. И всё это ИЛИ — так что выходит тождественная истина (B || !B = 1).
    (Простите, облом искать юникодные символы, так что беру из Си: && и, || или, ! не)
    Ответ написан
    1 комментарий
  • Нахождение F(x), для которой аргумент (элем. исход) ξ(ω) распределён неравномерно?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё точно так же. Считаем, что φ от −π/2 до π/2!!!!
    Fx(u) = p{x < u} = p{h tg φ < u} = p{φ < arctg(u/h)} = Fφ(arctg(u/h))

    Соответственно, в твоём случае φ от 0 до π, при непрерывном распределении:
    Fx(u) = p{x < u} = p{h ctg φ < u} = [арккотангенс убывает, меняется знак!!] = p{φ > arcctg(u/h)} = 1−Fφ(arcctg(u/h))

    Лучше брать arcctg(x/h), чем arctg(h/x) — не нужно делать скидку на то, что мы сидим на двух стульях кусках ОДЗ.
    655408c964d68977789634.png
    Ответ написан
  • Что такое трансцендентные числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Алгебраические числа — это корни многочлена с конечной степенью и целочисленными (ну или рациональными) коэффициентами. Так что пи не алгебраическое — то есть трансцендентное.
    Вот книга про это, добьёте решение в вашей форме? (Ваша чуть отличается от традиционной)
    mathemlib.ru/books/item/f00/s00/z0000027/st057.shtml
    Ответ написан
    2 комментария
  • Какя разница в формулах теоремы Байеса?

    @Mercury13
    Программист на «си с крестами» и не только
    В знаменателе — формула полной вероятности. Вот и всё.
    p(B) = p(B|A)·p(A) + p(B|¬A)·p(¬A)

    Для чего? Да просто p(B) в большинстве случаев хрен поймёшь, и его приходится вычислять непрямо. Например:
    A — письмо является спамом
    B — в письме есть слово «sex»
    Видим в письме слов «sex» — спам ли оно?
    Мы можем собрать базу спама со словом «sex», и базу обычной переписки с этим словом, и вычислить p(B|A) и p(B|¬A). А p(A) и p(¬A) вычисляются уже на компе конечного пользователя в зависимости от того, насколько жёстко его спамят.

    Пример второй. Каждый тысячный водитель — пьяный. Алкотестер чётко видит алкаша, но останавливает каждого сотого трезвого. Какой процент из приехавших в больницу действительно пьянствуют за рулём?
    U — проехавшие через пост водители
    A — пьяный
    B — алкотестер сработал
    Аналогично, p(B) заранее неизвестен, но приходится вычислять по полной вероятности. И вроде бы при таких цифрах один из одиннадцати попавшихся реально пьяный. И это затрудняет антитеррористические меры: если по городу-миллионнику ходит сотня террористов, какая должна быть точность, чтобы не ломать невинные жизни!
    UPD: чуть меньше 1/11: p(B|A)=1, p(A)=1/1000, p(B|¬A)=1/100, p(¬A)=999/1000,
    итого с сокращением на 1000 будет 1/(1+999/100)=100/1099.
    Ответ написан
    Комментировать
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @Mercury13
    Программист на «си с крестами» и не только
    ЦЕЛЫЕ ЧИСЛА / ФИКСИРОВАННАЯ ЗАПЯТАЯ
    ·0,5 в фиксированной запятой нет никакого смысла. /2 и арифметический сдвиг >>1 ведут себя немного по-разному на отрицательных числах, и как сейчас оптимизируют /2 с сохранением точности до бита — я не в курсе (Godbolt показывает пекло какое-то на пять команд — и оно быстрее, чем div?).

    ДРОБНЫЕ ЧИСЛА
    С /2 и ·0,5 никакой разницы, но второе быстрее. Если коэффициент не умещается в компьютерное дробное (⅓, например) — если нет никакого сакрального смысла в точности до бита, можно множить.
    Ответ написан
    Комментировать
  • Какова будет грамматика для данного языка?

    @Mercury13
    Программист на «си с крестами» и не только
    L → EZUU M ZUUUUF
    M → ZUU M ZUUUU | S
    Для S грамматику вы уже придумали.
    Затем — не буду расписывать, они многословны, но просты — UZ → ZU

    А чтобы превратить Z в 0 и U в единицу, если i,n ∊ N+…
    Сделаем затравку…
    EZ → E0
    Ua → 1a
    cZ → c0
    UF → 1F
    …Уничтожим технические нетерминалы…
    E0 → 0
    1F → 1
    …И проведём волну!
    0Z → 00
    U1 → 11

    Вроде так.
    (Z = zero, U = unit)
    Ответ написан
    Комментировать
  • Как разбить числа по группам так, чтобы в группах находились близкие по значению числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Это называется кластеризация, и самый ходовой метод для неё — K-means.
    Ответ написан
    2 комментария
  • Дедекиндово сечение. Какой в нем смысл?

    @Mercury13
    Программист на «си с крестами» и не только
    Один из способов получить из рациональных чисел действительные.
    Проблем не будет.
    Однако эти супремумы и инфимумы стоило бы помучить.
    Ответ написан
    1 комментарий
  • Почему при делении 5/9 получается 0.55555....6?

    @Mercury13
    Программист на «си с крестами» и не только
    Калькулятор Windows использует компьютерный double для трансцендентных операций, и (как, впрочем, и электронные калькуляторы) самописную десятичную арифметику для сложения/вычитания/умножения/деления. Ну и хорошо — про артефакты компьютерных (двоичных) дробных рассказывать не придётся.
    Возьми и округли в десятичной системе 0,5555555555555… — разумеется, будет 0,556. Или 0,5555556 — всё зависит от того, сколько разрядов хочешь оставить.
    Ответ написан
    Комментировать
  • Как изменить константу C в общем уравнении прямой Ax+By+C=0 при сдвиге прямой по вектору?

    @Mercury13
    Программист на «си с крестами» и не только
    U=(A,B) — перпендикулярный вектор прямой.
    Тогда dC = PrUV·|U| = U·V
    Всего лишь скалярное произведение.
    Проверка. x + y = 0, U=(1,1), V = (1,2)
    dC = 1·1 + 1·2 = 3, правильно?
    Ответ написан
    Комментировать
  • Как посчитать математические градусы?

    @Mercury13
    Программист на «си с крестами» и не только
    А арктангенс надо брать arctg((200−100)/(200−100))
    Кроме того, для этого есть функция atan2, определённая для всех x и y, одновременно не равных 0.
    Ответ написан
    4 комментария
  • Как найти координаты точек на дуге зная координаты точек хорды?

    @Mercury13
    Программист на «си с крестами» и не только
    По теореме Пифагора находим расстояние от центра до хорды: d = sqrt(R² − [(x2−x1)² + (y2−y1)²]/4).
    Находим середину отрезка AB (назовём её (x3, y3)). Находим направляющий вектор отрезка AB (x4,y4) = ((x2−x1)/|AB|, (y2−y1)/|AB|), и есть два варианта центра — (x0,y0) = (x3±d·y4, y3∓d·x4).
    А дальше через atan2 получаем углы, упорядочиваем их и через углы получаем сколько угодно точек.
    Ответ написан
  • Как сделать алгоритм?

    @Mercury13
    Программист на «си с крестами» и не только
    Пусть минимальный простой делитель a.
    Тогда минимальный делитель a (будь мин.делитель составной — нашёлся бы меньший), максимальный — x/a (по сходной причине), x=91·a².
    Кроме того, 91 = 7·13, и потому a <= 7.
    2²·91 и 3²·91 до четырёхзначного явно не дотягивают.
    А вот следующее — a=5 — даёт 2275 = 5²·7·13.
    Также должно подойти a=7, x=7³·13=4459.
    (Раз тут математика, часто запрещён даже калькулятор, потому попытался написать так, как думал бы человек без калькулятора)
    Ответ написан
    Комментировать
  • Есть ли простая математика расчета попадания в зону?

    @Mercury13
    Программист на «си с крестами» и не только
    Вам уже подсказали общие способы. Теперь специализированные.
    Точка гарантированно в охватывающем прямоугольнике. Мы получаем уравнения прямых и смотрим, с какой стороны. Проще всего это делать через косое произведение векторов — AX×AB <> 0, или
    (x − xA)(yB − yA) − (xB − xA)(y − yA) <> 0
    Ответ написан
    Комментировать
  • Это сколько 63 280,4 млн. долл.?

    @Mercury13
    Программист на «си с крестами» и не только
    Миллиарда
    Я бы такому редактору бил по рукам: постороннему читателю надо писать 63,3 млрд долларов.
    Ответ написан
    Комментировать