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

Dec 14, 2013 23:17

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

Сразу скажу: я не профессиональный программист. Большую часть знаний по программированию приобрёл самостоятельно. Программы приходится писать для решения ряда задач нелинейной динамики. В ходе решения очередной задачи возникла проблема: при добавлении синуса (см. пункт 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 реализована какая-то отдельная штука для вычисления математических функций (может какой-то математический сопроцессор). К сожалению, всё это лишь мои догадки.



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



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