mirror of https://gitlab.com/rnger/amath
431 lines
6.7 KiB
C++
431 lines
6.7 KiB
C++
/*-
|
|
* Copyright (c) 2014-2018 Carsten Sonne Larsen <cs@innolan.net>
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* Project homepage:
|
|
* https://amath.innolan.net
|
|
*
|
|
*/
|
|
|
|
#include "numb.h"
|
|
#include "nnumb.h"
|
|
|
|
NonNumber::NonNumber(NonNumberType type) :
|
|
Number(nsysreal)
|
|
{
|
|
this->type = type;
|
|
}
|
|
|
|
NonNumber::~NonNumber()
|
|
{
|
|
}
|
|
|
|
Number* NonNumber::Clone()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
int NonNumber::GetIntegerValue()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
double NonNumber::GetRealValue()
|
|
{
|
|
return 0.0;
|
|
}
|
|
|
|
bool NonNumber::PureComplexValue()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
int NonNumber::GetPrecedence()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int NonNumber::GetDefaultPrecedence()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
bool NonNumber::IsNegative()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool NonNumber::IsZero()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool NonNumber::IsNaN()
|
|
{
|
|
return type == nnnan;
|
|
}
|
|
|
|
bool NonNumber::IsInfinite()
|
|
{
|
|
return type == nnninf;
|
|
}
|
|
|
|
bool NonNumber::IsNotImplemented()
|
|
{
|
|
return type == nnnimp;
|
|
}
|
|
|
|
Number* NonNumber::Unary()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Add(Number* other)
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Sub(Number* other)
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Mul(Number* other)
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Div(Number* other)
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Raise(Number* exponent)
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Signum()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Trunc()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Round()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Floor()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Ceiling()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Absolute()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::SquareRoot()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::CubeRoot()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Reciprocal()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Factorial()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Log2()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Log()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Log10()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Cosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Secant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
/**
|
|
* @brief Trigonometric tangent function
|
|
*
|
|
* Tangent of +INF and -INF is NaN (with signals).
|
|
* Tangent of NaN is NaN.
|
|
*
|
|
* Signals are not implemented.
|
|
*
|
|
*/
|
|
Number* NonNumber::Tangent()
|
|
{
|
|
return new NonNumber(nnnan);
|
|
}
|
|
|
|
Number* NonNumber::Cotangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number *NonNumber::Chord()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypCosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypSecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypTangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypCotangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Sine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::Cosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcSecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcTangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcCotangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcCosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number *NonNumber::ArcChord()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcSecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcCosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcTangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HypArcCotangent()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::VerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::VerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::CoVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::CoVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HaVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HaVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HaCoVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::HaCoVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcCoVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcCoVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcHaVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcHaVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcHaCoVerSine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcHaCoVerCosine()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ExSecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ExCosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcExSecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|
|
|
|
Number* NonNumber::ArcExCosecant()
|
|
{
|
|
return new NonNumber(type);
|
|
}
|