Это реализация от Microsoft для Sinh
Complex
public static Complex Sinh(Complex value) /* Hyperbolic sin */
{
double a = value.m_real;
double b = value.m_imaginary;
return new Complex(Math.Sinh(a) * Math.Cos(b), Math.Cosh(a) * Math.Sin(b));
}
и реализация для Cosh
public static Complex Cos(Complex value) {
double a = value.m_real;
double b = value.m_imaginary;
return new Complex(Math.Cos(a) * Math.Cosh(b), - (Math.Sin(a) * Math.Sinh(b)));
}
и, наконец, реализация для Tanh
public static Complex Tanh(Complex value) /* Hyperbolic tan */
{
return (Sinh(value) / Cosh(value));
}
Источник: https://referencesource.microsoft.com/System.Numerics/a.html#e62f37ac1d0c67da
Я не понимаю, почему Microsoft внедрила метод Tanh
таким образом?
Он потерпит неудачу при очень большомценности.Например:
tanh(709 + 0i) --> 1
, нормально tanh(711 + 0i) --> NaN
, сбой должен быть 1
Любые идеи, как улучшить метод tanh
, который?
Для double
методы Math.Tanh
работают для больших значений.