⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.cpp

📁 大学时用c++做的计算器
💻 CPP
字号:
#include "function.h"

#include <cmath>

void Function::setRDState(RDState s)
{
    __state = s;
}

ValueType Function::Sin(const ValueType& v)
{
    if (__state == Degrees)
    {
        if (Abs(sin(v * Pi / 180)) < Minimum)
            return 0.0;
        else
            return sin(v * Pi / 180);
    }
    else
    {
        if (Abs(sin(v)) < Minimum)
            return 0.0;
        else
            return sin(v);
    }
}

ValueType Function::Cos(const ValueType& v)
{
    if (__state == Degrees)
    {
        if (Abs(cos(v * Pi / 180)) < Minimum)
            return 0.0;
        else
            return sin((90 - v) * Pi / 180);
    }
    else
    {
        if (Abs(cos(v)) < Minimum)
            return 0.0;
        else
            return sin(Pi / 2 * v);
    }
}

ValueType Function::Tan(const ValueType& v)
{
    double tmp;
    
    if (__state == Degrees) {
       if (modf(v, &tmp) == 0.0 && (Abs(v - 90) < Minimum))
          throw TanError();
    }
    else if (modf(2 * v / Pi, &tmp) == 0.0)
        throw TanError();
    
    if (__state == Degrees)
    {
        if (Abs(tan(v * Pi / 180)) < Minimum)
            return 0.0;
        else
            return tan(v * Pi / 180);
    }
    else
    {
        if (Abs(tan(v)) < Minimum)
            return 0.0;
        else
            return tan(v);
    }
}

ValueType Function::Asin(const ValueType& v)
{
    if (v < -1.0 || 1.0 < v) throw AsinError();
    
    if (__state == Degrees)
        return asin(v) * 180 / Pi;
    else
        return asin(v);
}

ValueType Function::Acos(const ValueType& v)
{
    if (v < -1.0 || 1.0 < v) throw AcosError();
    
    if (__state == Degrees)
        return acos(v) * 180 / Pi;
    else
        return acos(v);
}

ValueType Function::Atan(const ValueType& v)
{
    if (__state == Degrees)
        return atan(v) * 180 / Pi;
    else
        return atan(v);
}

ValueType Function::Sinh(const ValueType& v)
{
    return sinh(v);
}

ValueType Function::Cosh(const ValueType& v)
{
    return cosh(v);
}

ValueType Function::Tanh(const ValueType& v)
{
    return tanh(v);
}

ValueType Function::Asinh(const ValueType& v)
{
    return log(v + sqrt(v*v + 1));
}

ValueType Function::Acosh(const ValueType& v)
{
    if (v < 1.0)
        throw AcoshError();
    return log(v + sqrt(v*v - 1));
}

ValueType Function::Atanh(const ValueType& v)
{
    if (v <= -1.0 || 1.0 <= v)
        throw AtanhError();
    return (log(1 + v) - log(1 - v)) / 2;
}

ValueType Function::Exp(const ValueType& v)
{
    return exp(v);
}

ValueType Function::Ln(const ValueType& v)
{
    if (v <= 0.0) throw LnError();
    
    return log(v);
}

ValueType Function::Log(const ValueType& v)
{
    if (v <= 0.0) throw LogError();
    
    return log10(v);
}

ValueType Function::Sqrt(const ValueType& v)
{
    if (v < 0.0) throw SqrtError();
    
    return sqrt(v);
}

ValueType Function::Fct(const ValueType& v)
{
	long double res = 1;

	for (unsigned long i = 1; i <= static_cast<unsigned long>(v); i++)
	    res *= i;

	return res;
}

ValueType Function::Abs(const ValueType& v)
{
    if (v >= 0)
        return v;
    else
        return -v;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -