Ответы пользователя по тегу Программирование
  • Почему приложение на OS X на Swift такое медленное?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Открываем профайлер и запускаем на 5000.
    Видим, что из 26 секунд, необходимых программе на выполнение функции, почти все они уходят на завершение редактирования NSTextView.
    pikucha.ru/iedeV

    Теперь делаем финт ушами и выводим создание строки отдельно, отображение для неё отдельно. (Заранее извиняюсь за какие-то ошибки в коде, это мой первый раз на свифте)
    @IBAction func TextGenGo(sender: AnyObject) {
            var i:int_least32_t;
            var string = outcomeText.string;
            for (i=1;i<=textCount.intValue;i++) {
                string = string! + String(i) + " ";
            }
            outcomeText.string = string;
        }

    Теперь выполнение 20000 заняло пол секунды.
    Ответ написан
    3 комментария
  • Тесты к олимпиадным задачам по программированию?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Вам сюда -> КЛИК!
    Ответ написан
    Комментировать
  • Разложение cosec в ряд Тейлора C++?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Советую почти полностью переписать код, хорошенько его оптимизировав. Например бессмысленно находить каждый раз 2^(2n+1), зная значение 2^(2n-1). Тоже самое для факториала.
    В итоге нахождение косинуса поместится в 1 цикл и для определения достижения необходимой точности не понадобится 2жды вызывать две довольно затратные функции.

    UPD. И в этом условии:
    abs(f(n,sum)-f(n+1,sum))<epsilon
    должен стоять знак больше

    UPD2. для double и float лучше использовать функцию
    double fabs (double x);
    float fabs (float x);
    long double fabs (long double x);


    UPD3. По поводу оптимизации, я имел в виду нечто такое:
    double sin(double x, double EPS) {
        double result = x;
        double delta = x;
        for (int n=1; fabs(delta)>EPS; n++) {
            delta *= x/(2*n)*x/(2*n+1);
            delta *= -1;
            result+=delta;
        }
        return result;
    }
    double cosec(double x, double EPS) {
        return 1.0f/sin(x, EPS);
    }
    Ответ написан
    5 комментариев