Adjusted workflow.
This commit is contained in:
91
src/Math.cpp
Normal file
91
src/Math.cpp
Normal file
@@ -0,0 +1,91 @@
|
||||
#include "ehs/Math.h"
|
||||
#include "ehs/system/Architecture.h"
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
bool Math::AbsCmp(const float a, const float b)
|
||||
{
|
||||
return Abs(a - b) <= fltEpsilon;
|
||||
}
|
||||
|
||||
bool Math::AbsCmp(const double a, const double b)
|
||||
{
|
||||
return Abs(a - b) <= fltEpsilon;
|
||||
}
|
||||
|
||||
bool Math::RelCmp(const float a, const float b)
|
||||
{
|
||||
return Abs(a - b) <= fltEpsilon * Max(Abs(a), Abs(b));
|
||||
}
|
||||
|
||||
bool Math::RelCmp(const double a, const double b)
|
||||
{
|
||||
return Abs(a - b) <= fltEpsilon * Max(Abs(a), Abs(b));
|
||||
}
|
||||
|
||||
bool Math::ComCmp(const float a, const float b)
|
||||
{
|
||||
return Abs(a - b) <= fltEpsilon * Max(1.0f, Max(Abs(a), Abs(b)));
|
||||
}
|
||||
|
||||
bool Math::ComCmp(const double a, const double b)
|
||||
{
|
||||
return Abs(a - b) <= dblEpsilon * Max(1.0, Max(Abs(a), Abs(b)));
|
||||
}
|
||||
|
||||
double Math::Sqrt(const double from)
|
||||
{
|
||||
#if defined(EHS_ARCH_X64)
|
||||
if (CPU::HasAVX())
|
||||
return Sqrt_AVX(from);
|
||||
else if (CPU::HasSSE())
|
||||
return Sqrt_SSE2(from);
|
||||
|
||||
double temp = 0.0;
|
||||
double result = from / 2.0;
|
||||
|
||||
while (result != temp)
|
||||
{
|
||||
temp = result;
|
||||
result = (from / temp + temp) / 2.0;
|
||||
}
|
||||
|
||||
return result;
|
||||
#elif defined(EHS_ARCH_ARM64)
|
||||
return Sqrt_VFP4(from);
|
||||
#endif
|
||||
}
|
||||
|
||||
float Math::Sqrt(const float from)
|
||||
{
|
||||
#if defined(EHS_ARCH_X64)
|
||||
if (CPU::HasAVX())
|
||||
return Sqrt_AVX(from);
|
||||
else if (CPU::HasSSE())
|
||||
return Sqrt_SSE(from);
|
||||
|
||||
float temp = 0.0f;
|
||||
float result = from / 2.0f;
|
||||
|
||||
while (result != temp)
|
||||
{
|
||||
temp = result;
|
||||
result = (from / temp + temp) / 2.0f;
|
||||
}
|
||||
|
||||
return result;
|
||||
#elif defined(EHS_ARCH_ARM64)
|
||||
return Sqrt_VFP4(from);
|
||||
#endif
|
||||
}
|
||||
|
||||
float Math::Mod(const float from, const float divisor)
|
||||
{
|
||||
return from - Trunc(from / divisor) * divisor;
|
||||
}
|
||||
|
||||
double Math::Mod(const double from, const double divisor)
|
||||
{
|
||||
return from - Trunc(from / divisor) * divisor;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user