enmergent commit on 20230213 by nitload youmu, recovery of math functions
This commit is contained in:
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Calc
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
// some of the code is rewritten from the AMD code:
|
||||
//
|
||||
//
|
||||
// some of the code is rewritten from the AMD code:
|
||||
// https://github.com/amd/aocl-libm-ose/blob/a43e092b03213eb0e129a1cc129900e6e4475778/src/ref/asinf.c
|
||||
|
||||
|
||||
@@ -7,9 +9,9 @@ using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Calc
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
|
||||
private const float
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
public static unsafe float ATan(float x)
|
||||
{
|
||||
float sign = 1, angle = 0;
|
||||
if (x < 0)
|
||||
{
|
||||
sign = -1;
|
||||
x = -x;
|
||||
}
|
||||
uint xBit = *(uint*)&x;
|
||||
int xExp = (int)(xBit >> 23) - 127;
|
||||
if (xExp >= 26)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (xExp <= -15)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
if (xExp >= 0)
|
||||
{
|
||||
x = (x - 1) / (x + 1);
|
||||
angle = 0.7853981634f;
|
||||
}
|
||||
|
||||
float v = 0.7853981634f * x + x * (1 - x) * (0.2447f+0.0663f * x);
|
||||
v += angle;
|
||||
v *= sign;
|
||||
|
||||
return v;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static unsafe float ATan(float x, float y)
|
||||
{
|
||||
|
||||
|
||||
float z = y / x;
|
||||
|
||||
float sign = 1, angle = 0,angle2 = 0;
|
||||
if (x<0)
|
||||
{
|
||||
angle = -3.1415926535f ;
|
||||
}
|
||||
if (z < 0)
|
||||
{
|
||||
sign = -1;
|
||||
z = -z;
|
||||
}
|
||||
uint zBit = *(uint*)&z;
|
||||
int zExp = (int)(zBit >> 23) - 127;
|
||||
if (zExp >= 26)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (zExp <= -15)
|
||||
{
|
||||
return z;
|
||||
}
|
||||
if (zExp >= 0)
|
||||
{
|
||||
z = (z - 1) / (z + 1);
|
||||
angle2 = 0.7853981634f;
|
||||
}
|
||||
|
||||
float v = 0.7853981634f * z + z * (1 - z) * (0.2447f + 0.0663f * z);
|
||||
v *= 57.29577951f;
|
||||
v += angle2;
|
||||
v += angle;
|
||||
v *= sign;
|
||||
|
||||
return v;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static partial class Calc
|
||||
public static partial class Math
|
||||
{
|
||||
|
||||
public static float Cos(float x)
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Calc
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
|
||||
public const float E = 2.718281828f;
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Calc
|
||||
|
||||
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -4,9 +4,12 @@ using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using static System.Net.WebRequestMethods;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static partial class Calc
|
||||
|
||||
|
||||
|
||||
public static partial class Math
|
||||
{
|
||||
|
||||
static private readonly float[] logArray =
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static unsafe partial class Calc
|
||||
public static unsafe partial class Math
|
||||
{
|
||||
/// <summary>
|
||||
/// calculate the value of x^y
|
||||
@@ -35,7 +35,7 @@ namespace StgSharp.Math
|
||||
{
|
||||
return 1.0f / 0;
|
||||
}
|
||||
z = StgSharp.Math.Calc.Log(x) * y;
|
||||
z = StgSharp.Math.Log(x) * y;
|
||||
|
||||
bool sign = false;
|
||||
if (z < 0)
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static partial class Calc
|
||||
public static partial class Math
|
||||
{
|
||||
private static readonly float[] sinData =
|
||||
{
|
||||
|
||||
@@ -3,9 +3,9 @@ using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static partial class Clac
|
||||
public static partial class Math
|
||||
{
|
||||
/*本方法将小数部分统一提升至2^16处后进行线性近似
|
||||
const uint sqmov = 0b_0100_0111_1000_0000_0000_0000_0000_0000;
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
namespace StgSharp
|
||||
{
|
||||
public static partial class Calc
|
||||
public static partial class Math
|
||||
{
|
||||
|
||||
public static float Tan(float x)
|
||||
|
||||
@@ -1,34 +1,82 @@
|
||||
using System;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Vector
|
||||
{
|
||||
public struct Vec2x1:IEquatable<Vec2x1>
|
||||
public struct Vec2D:IEquatable<Vec2D>
|
||||
{
|
||||
float a1;
|
||||
float a2;
|
||||
float X;
|
||||
float Y;
|
||||
float Direction;
|
||||
float Length;
|
||||
|
||||
public Vec2x1(float x,float y)
|
||||
public Vec2D(float x,float y)
|
||||
{
|
||||
a1 = x;
|
||||
a2 = y;
|
||||
X = x;
|
||||
Y = y;
|
||||
Direction = 0;
|
||||
}
|
||||
|
||||
public bool Equals(Vec2x1 other)
|
||||
public bool Equals(Vec2D other)
|
||||
{
|
||||
return true;
|
||||
if (this.GetHashCode() != other.GetHashCode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.X == other.X && this.Y == other.Y;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static bool operator ==(Vec2x1 vec1, Vec2x1 vec2)
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return true;
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (obj.GetType() != typeof(Vec2D))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.Equals((Vec2D)obj);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool operator !=(Vec2x1 vec1, Vec2x1 vec2)
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return false;
|
||||
return HashCode.Combine(X, Y);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{this.X},{this.Y}";
|
||||
}
|
||||
|
||||
public static bool operator ==(Vec2D vec1, Vec2D vec2)
|
||||
{
|
||||
return vec1.X==vec2.X && vec1.Y==vec2.Y;
|
||||
}
|
||||
|
||||
public static bool operator !=(Vec2D vec1, Vec2D vec2)
|
||||
{
|
||||
return !(vec1.X == vec2.X && vec1.Y == vec2.Y);
|
||||
}
|
||||
|
||||
public static Vec2D operator +(Vec2D vec1, Vec2D vec2)
|
||||
{
|
||||
return new Vec2D(vec1.X + vec2.X, vec1.Y + vec2.Y);
|
||||
}
|
||||
|
||||
public static Vec2D operator -(Vec2D vec1, Vec2D vec2)
|
||||
{
|
||||
return new Vec2D(vec1.X + vec2.X, vec1.Y + vec2.Y);
|
||||
}
|
||||
|
||||
public static
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user