Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ public class FixedPointNanoMathBenchmarks
private readonly double _rightDouble = 7.123456789d;
private readonly double _sqrtInputDouble = 1234.567890123d;
private readonly double _doubleValue = 1234.567890123d;
private readonly Fpn _lerpAmount = Fpn.FromDecimal(0.5m);
private readonly decimal _lerpAmountDecimal = 0.5m;
private readonly double _lerpAmountDouble = 0.5d;
private readonly Fpn _clampMin = Fpn.FromDecimal(0m);
private readonly Fpn _clampMax = Fpn.FromDecimal(10000m);
private readonly decimal _clampMinDecimal = 0m;
private readonly decimal _clampMaxDecimal = 10000m;
private Fpn[] _fixedValues = [];
private decimal[] _decimalValues = [];
private double[] _doubleValues = [];
Expand Down Expand Up @@ -202,6 +209,38 @@ public Fpn TruncateRaw()
return Fpn.Truncate(_left);
}

[Benchmark]
public Fpn LerpDecimalReference()
{
var start = _left.ToDecimal();
var end = _right.ToDecimal();
return Fpn.FromDecimal(start + (end - start) * _lerpAmountDecimal);
}

[Benchmark]
public double LerpDoubleReference()
{
return _leftDouble + (_rightDouble - _leftDouble) * _lerpAmountDouble;
}

[Benchmark]
public Fpn LerpRaw()
{
return Fpn.Lerp(_left, _right, _lerpAmount);
}

[Benchmark]
public Fpn ClampDecimalReference()
{
return Fpn.FromDecimal(Math.Clamp(_left.ToDecimal(), _clampMinDecimal, _clampMaxDecimal));
}

[Benchmark]
public Fpn ClampRaw()
{
return Fpn.Clamp(_left, _clampMin, _clampMax);
}

[Benchmark]
public Fpn AbsDecimalReference()
{
Expand Down
2 changes: 2 additions & 0 deletions src/FixedPointNano/FixedPointNano.cs
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ public static FixedPointNano CopySign(FixedPointNano value, FixedPointNano sign)
return value.RawValue > 0 ? new FixedPointNano(-value.RawValue) : value;
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static FixedPointNano Lerp(FixedPointNano start, FixedPointNano end, FixedPointNano amount)
{
return start + (end - start) * amount;
Expand Down Expand Up @@ -514,6 +515,7 @@ public static FixedPointNano Truncate(FixedPointNano value)
return new FixedPointNano((value.RawValue / Scale) * Scale);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static FixedPointNano Frac(FixedPointNano value)
{
return new FixedPointNano(value.RawValue % Scale);
Expand Down