Implements remainder and exponent operators
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
using System;
|
||||
|
||||
namespace Upsilon.BaseTypes.Number
|
||||
{
|
||||
internal abstract class ScriptNumber : ScriptType
|
||||
@@ -41,6 +43,17 @@ namespace Upsilon.BaseTypes.Number
|
||||
return new ScriptNumberDouble(((ScriptNumberLong) a).Value * ((ScriptNumberDouble) b).Value);
|
||||
}
|
||||
|
||||
public static ScriptNumber operator % (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
if (!a.IsFloat && !b.IsFloat)
|
||||
return new ScriptNumberLong(((ScriptNumberLong) a).Value % ((ScriptNumberLong) b).Value);
|
||||
if (a.IsFloat && b.IsFloat)
|
||||
return new ScriptNumberDouble(((ScriptNumberDouble) a).Value % ((ScriptNumberDouble) b).Value);
|
||||
if (a.IsFloat)
|
||||
return new ScriptNumberDouble(((ScriptNumberDouble) a).Value % ((ScriptNumberLong) b).Value);
|
||||
return new ScriptNumberDouble(((ScriptNumberLong) a).Value % ((ScriptNumberDouble) b).Value);
|
||||
}
|
||||
|
||||
public static ScriptNumber operator / (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
if (!a.IsFloat && !b.IsFloat)
|
||||
@@ -60,6 +73,18 @@ namespace Upsilon.BaseTypes.Number
|
||||
return new ScriptNumberLong(-((ScriptNumberLong)n).Value);
|
||||
}
|
||||
|
||||
public static ScriptNumber Exponent(ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
if (!a.IsFloat && !b.IsFloat)
|
||||
return new ScriptNumberLong((long) Math.Pow(((ScriptNumberLong) a).Value, ((ScriptNumberLong) b).Value));
|
||||
if (a.IsFloat && b.IsFloat)
|
||||
return new ScriptNumberDouble(Math.Pow(((ScriptNumberDouble) a).Value, ((ScriptNumberDouble) b).Value));
|
||||
if (a.IsFloat)
|
||||
return new ScriptNumberDouble(Math.Pow(((ScriptNumberDouble) a).Value, ((ScriptNumberLong) b).Value));
|
||||
return new ScriptNumberDouble(Math.Pow(((ScriptNumberLong) a).Value, ((ScriptNumberDouble) b).Value));
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Equality
|
||||
private bool Equals(ScriptNumber other)
|
||||
@@ -117,6 +142,7 @@ namespace Upsilon.BaseTypes.Number
|
||||
|
||||
|
||||
|
||||
|
||||
public static explicit operator double(ScriptNumber n)
|
||||
{
|
||||
if (n.IsFloat)
|
||||
|
||||
Reference in New Issue
Block a user