• Быстрый обратный корень на Java

    Fast Inverse Square Root, он же Fast InvSqrt() или 0x5f3759d5 — способ вычисления обратного квадратного корня из числа = 1/sqrt(x). Изобретен еще в 90-х годах. Если верить википедии, то этот алгоритм использовался в Quake III. Главная фишка метода в использовании «магической» константы — 0x5f3759d5, с помощью которой можно получить первое приближенное значение. Затем обычным методом Ньютона получаем улучшенное приближение. Подробнее можно прочитать здесь и здесь. public static float invSqrt(float x) { float xhalf = 0.5f*x; // x пополам int i = Float.floatToIntBits(x); // битовое представление числа. i = 0x5f3759d5 — (i >> 1); // отрицательные x не волнуют, т.к. из…

    Читать далее…

  • Принцип работы FFT и Scala

    Разбор алгоритма быстрого преобразования фурье (он же Fast Fourier transform, он же FFT). Целью публикации является отобразить суть алгоритма, а не создание быстрой по скорости работы реализации. Т.к. в этой программе я буду интенсивно использовать объекты вместо примитивных типов, а также рекурсию, скорость работы будет заведомо уступать многим другим реализациям FFT, которые можно сейчас найти в интернете в огромном количестве в открытом доступе.

    Читать далее…

  • printf

    Небольшой справочник «для себя» по работе с джавным printf(). Для простоты текста заменил System.out.printf() на printf(). Базовые конструкции. %s → String или toString(). printf(«Hello %s!», «World»); // «Hello World!» %n → Перенос строки. Byte, Short, Int, Long. %d → В десятеричном. %x → В шестнадцатеричном. %7d → В десятеричном. Минимальная ширина строки 7 знаков. printf(«%7d», 1); // »      1″ %07d → Минимальная ширина строки 7 знаков. Начало забить нулями. printf(«%07d», 1); // «0000001» Float, Double. %f → Десятичное  число с точкой. %e → Десятичное  число с точкой и экспонентой. %.10f → С точностью 10 знаков после запятой. printf(«%.10f», Math.PI); //…

    Читать далее…