goliafffff (goliafffff) wrote,
goliafffff
goliafffff

Программистское

Далее под катом немного кода на СИ и одна проблема. Если у вас есть немного свободного времени и вы программист, то я буду очень рад помощи.

Сразу скажу: я не профессиональный программист. Большую часть знаний по программированию приобрёл самостоятельно. Программы приходится писать для решения ряда задач нелинейной динамики. В ходе решения очередной задачи возникла проблема: при добавлении синуса (см. пункт 2) программа начинает вести себя по-разному на различных компьютерах. Причём, если в программе синуса нет (см. пункт 1), то на всех доступных компьютерах программа работает абсолютно идентично. Я запускал задачу на трёх компьютерах: MacBook Pro (Intel Core 2 Duo), Desktop (Intel i7, на нём, кстати, самый хороший счёт наилучшим образом совпадающий с теорией) и ещё один Desktop с двуядерным интеловским процессором (точную модификацю забыл).

Поясню немного чем я занимаюсь. В ходе своего исследования я анализирую некоторые статистические характеристики одномерного нелинейного отображения в режиме хаоса. Отображение представляет из себя обыкновенную функцию, которая при каждой итерации вычисляет следующее значение переменной x, зная предыдущее значение переменной. Если отложить по оси X итерации, а по оси Y значения переменной x, то мы получим временной ряд, статистические характеристики которого можно исследовать. Сложность заключается в том, что описанное отображение x_{n+1} = (a*x_{n} - x_{n}^3)*exp(-(x_{n}^2)/b) находится в режиме динамического хаоса. То есть если мы запустим две копии отображения и зададим мельчайшее различие начальных условий переменной x, то уже через несколько итераций значения переменных станут абсолютно разными. Строго говоря, мельчайшее отклонение начальных условий нарастает экспоненциально, и мы получим два различных временных ряда. На основе получившегося временного ряда считается некая статистическая зависимость (назовём её p = f(g) ), которая должна подчинятся определённому математическому закому.

Если в системе нет синуса, то на всех компьютерах значения рассчитанной величины p абсолютно идентичны. Но стоит добавить синус, как три компьютера показывают три различные значения p. Причём Desktop с Core i7 считает просто идеально, зависимость p = f(g) ведёт себя так как надо и подчиняется теоретическому закому, а вот на остальных двух компьютерах какая-то околесица (вроде что-то похоже на правду, но не то).

Я не знаю, как в компьютере реализована функция синуса. Могу только предположить, что синус задан разложением в ряд Тейлора и на каждом из компьютеров различное количество элементов разложения. Либо в процессоре Core i7 реализована какая-то отдельная штука для вычисления математических функций (может какой-то математический сопроцессор). К сожалению, всё это лишь мои догадки.

1

Есть ещё один интересный момент. В ходе поиска ошибки коллега предложил поиграться с аргументами синуса и сделать следующее:

2

И вот что получилось: зависимость статистической величины p = f(g), на всех компьютерах стала одинаковой, но неправильной с точки зрения математической теории! Сами значения величины p не совпали, но стали отличаться всего на несколько процентов. В чём проблема? Как с этим бороться?
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 24 comments