Странность в работе функции MathExp

 
В индикаторе понадобилось вычислить функцию tanh(x). Пишу, как обычно:
y = MathExp(x);
z = 1.0 / y;
tanh = (y - z) / (y + z);
диапазон значений аргумента +/- 2.0. Получаю ошибку "zero divide". Выясняю место ошибки, оказывается, оно в операторе z=1.0/y; чего быть не может в принципе.
Для проверки пишу экспоненту самопалом:
// exp(x)
y = 1.0; dy = 1.0; i = 1;
while (MathAbs(dy) > 0.000001) { dy *= (x / i); y += dy; i++; }
// tanh(x)
z = 1.0 / y;
tanh = (y - z) / (y + z);
Работает, как часы (хотя и, понятное дело, медленно).
В справке по функции MathExp читаем: "При переполнении функция возвращает INF (бесконечность), в случае потери порядка MathExp возвращает 0." Потери порядка произойти здесь никак не могло.
 
А с какого x начинали расчет?
Приведите, пожалуйста, точное значение x, при котором получили такой результат.
 
Мы используем стандартную функцию exp
 
Разобрался:
2006.08.25 13:22:09 AS_BandsTradeNN1 USDCHF,M5: 63181, 2386092939677.6172
,
т.е. переполнение по аргументу (х=2386092939677.6172 ). Мой самопал, естественно, тоже не срабатывает. Но почему тогда выдается несколько несуразная диагностика "zero divide"?
Причина обращения: