1. C# / Говнокод #7619

    +137

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    xxx: Скажите пожалуйста нубоюзеру, как в сишарпе извлечь корень определённой степени?
    yyy: http://msdn.microsoft.com/ru-ru/library/system.math.sqrt.aspx (Math.Sqrt, Возвращает квадратный корень из указанного числа.)
    xxx: Спасибо, но желательно бы не только >квадратный< корень, но и заданной степени.
    yyy: Делай через циклы или рекурсивно.
    double SuperSquare(double number, int n)
    {
     double result = number;
     for(int i = 0; i < n; i++)
     {
     result = Math.Sqrt(result)
     }
     return result;
    }
    // Както так

    Инновационный способ вычислять корень заданной степени.

    Запостил: flawy, 23 Августа 2011

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

    • На башОрк
      Ответить
    • ололо, башорк
      Ответить
    • но позвольте, данный способ пригоден лишь для корней степеней двойки: 2 (квадратный корень), 4, 8... и т.д. = )
      Ответить
      • Делов-то: приближаешь знаменатель степенью двойки да извлекаешь, время от времени приплясывая дабы ошибка сильно не накопилась (можно числитель в двоичном виде представить и получить сумму дробей). Рекомендую.
        Ответить
    • как нужно: использовать степень Math.Pow, c показателем степени 1.0/n
      Ответить
    • Сжимающие отображения? не, не слышал. А ещё
      x^(1/n)  = exp ( (log x) / n)
      Ответить
      • еще помните математику? похвально
        только, наверное, в результате логарифма, деления и экспоненты точность пострадает
        Ответить
        • Это если находиться на уровне школьной математики. В высшей математике точность можно регулировать, какая надо, такая и будет. Правда такую функциональность написать ещё надо.
          Ответить
        • Посчитал сейчас в emacs'е корень из двух, он показал 15 цифр после запятой, все правильные:
          (exp (/ (log 2)  2))
          1.414213562373095
          Ответить
          • не-не-не, а если через сишарп-код?
            Ответить
            • Emacs использует обычную арифметику для чисел с плавающей точкой, а стандартные функции, скорее всего, биндятся к сишным из math.h. Так что различий быть не должно.
              Ответить
              • это хорошо, что мои опасения были напрасны )

                проверил на джаве:
                public class Test {
                  public static void main(final String[] args) {
                    System.out.println(Math.pow(2, 1.0 / 2));
                    System.out.println(Math.exp(Math.log(2) / 2.0));
                  }
                }
                вывод:
                1.4142135623730951
                1.414213562373095
                Ответить
      • В таком случае не будут получены корни из отрицательных чисел, т.е. Math.Pow(-27, 1 / 3), т.как первым подходящим вариантом оказывается комплексное число, и его, как правило нет возможности представить в языке, в котором делаются вычисления.
        Ответить
        • Корни из отрицательных чисел - вообще отдельная песня. Я почти уверен, что выражение
          Math.Pow(-27, 1.0 / 3.0)
          вернёт NaN. Во всяком случае, java-аналог Math.pow() сделает именно это.
          Ответить
          • а в руби есть комплексные числа :Р
            irb(main):004:0> (-4)**(1.0/2)
            => (1.2246063538223773e-16+2.0i)
            Ответить
            • в python они тоже есть:
              >>> pow(-4, 0.5)
              (1.2246467991473532e-16+2j)
              Ответить
              • всегда считал, что мнимая единица обозначается буквой i
                Ответить
                • Богата и своеобразна фантазия укуренного Гвидо.
                  Ответить
                • А на самом деле всё зависит от дисциплины: математики обычно обозначают мнимую единицу буквой i, а инженеры - j. Приходилось листать книжку Дёча по преобразованию лапласа (http://lib.mexmat.ru/books/1775) (довольно занятная, кстати), так там мнимая единица везде обозначалась как j.
                  Похоже, питонщики - больше инженеры-практики, а рубисты - теоретики :D
                  Ответить
                  • Всё ясно, Мацумото больше математик, а Гвидо - инженер )))
                    Ответить
                • ТОЭ в универе не было?
                  Электрики, они категорически не приемлют i. Только j.
                  Ответить
      • Ну и кроме того, не забывайте, что вы получаете только один из корней, подвох мог быть и в этом тоже.
        Ответить
        • Зато с линейкой все в порядке чо вы xDDDD
          Ответить
          • Боюсь, вам прийдется доказать, что теория струн верна, чтобы убедить здравомыслящего человека, что на одной линейке могут быть отложены и рациональные и иррациональные числа. Но, мне кажется, что эта дискуссия себя исчерпала.
            Ответить
            • А что, есть связь между теорией струн и школьной геометрией? Представляю школьный учебник через 100 лет: "Теория струн, 8 класс"
              Ответить
        • > подвох мог быть и в этом тоже
          подвох?
          Ответить
          • Ну, пока что все предложенные решения дают только положительные корни. Если ххх хотел получить все корни, а не все положительные корни, и хотел постебаться над ууу, то да, подвох, почему бы и нет?
            ЗЫ. Я был бы только рад, если бы теорию струн учили в школе, а что в этом плохого?
            Ответить
            • Не хочу вас огорчать, но в обычном математическом анализе корни извлекают только из положительных чисел, и результат извлечения корня тоже должен быть положительным. Так что давайте обойдёмся без рассмотрения веток многозначных функций и прочих неуместных предположений.
              Ответить
              • Я не знаю, как по-русски правильно называется то, о чем вы говорите, но по-английски это principal root. И, от того, что какая-то дисциплина не рассматривает какие-то значения эти самые значения никуда не деваются. -2 точно такой же корень квадратный из 4, как и 2...
                Ответить
                • > -2 точно такой же корень квадратный из 4, как и 2
                  C этим я и не думаю спорить.

                  Вам бы удобно было на практике работать с библиотечной функцией, которая в ответ на просьбу извлечь кубический корень возвращает список всех решений, в т.ч. комплексных?
                  Ответить
                  • Да, удобно. В системах символьных вычислений (Maple, Mathematica, Maxima) так и есть.
                    Ответить
                    • Интересно, как часто в C# люди работают с символьными вычислениями? :)
                      Ответить
                • А когда вы извлекаете логарифм, вы ожидаете получить бесконечный список решений?
                  Ответить

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