Browse Source

Removed AlmostZero and add reference to the NIST test data in the unit tests project

Signed-off-by: Marcus Cuda <marcus@cuda.net>
la-knuth
Marcus Cuda 17 years ago
parent
commit
36b0498e6d
  1. 5
      build/build.proj
  2. 13
      src/Numerics/Algorithms/LinearAlgebra/ManagedLinearAlgebra.cs
  3. 26
      src/Numerics/Complex.cs
  4. 2
      src/Numerics/Interpolation/Algorithms/AkimaSplineInterpolation.cs
  5. 4
      src/Numerics/Interpolation/Algorithms/BulirschStoerRationalInterpolation.cs
  6. 4
      src/Numerics/LinearAlgebra/Double/DenseVector.cs
  7. 7
      src/Numerics/LinearAlgebra/Double/Vector.cs
  8. 176
      src/Numerics/Precision.cs
  9. 2
      src/Numerics/SpecialFunctions/Stability.cs
  10. 27
      src/UnitTests/PrecisionTest.cs
  11. 228
      src/UnitTests/UnitTests.csproj

5
build/build.proj

@ -47,6 +47,11 @@
<Exec Command="$(MSBuildProjectDirectory)\..\tools\Gendarme-2.4\gendarme.exe $(MSBuildProjectDirectory)\..\src\Numerics\bin\Debug\MathNet.Numerics.dll"/>
</Target>
<Target Name="SimpleTest" >
<Gallio.MSBuildTasks.Gallio ContinueOnError="False" IgnoreFailures="False" Assemblies="../src/UnitTests/bin/Debug/MathNet.Numerics.UnitTests.dll"/>
<Exec Command="$(MSBuildProjectDirectory)/../src/FSharpUnitTests/bin/Debug/FSharpUnitTests.exe" IgnoreExitCode="false" />
</Target>
<Target Name="BuildAndTest" DependsOnTargets="Test; Style; Gendarme"/>
<Target Name="Release" DependsOnTargets="BuildDocs"></Target>

13
src/Numerics/Algorithms/LinearAlgebra/ManagedLinearAlgebra.cs

@ -55,12 +55,12 @@ namespace MathNet.Numerics.Algorithms.LinearAlgebra
throw new ArgumentException(Properties.Resources.ArgumentVectorsSameLength);
}
if (alpha.AlmostZero())
if (alpha == 0.0)
{
return;
}
if (alpha.AlmostEqual(1.0))
if (alpha == 1.0)
{
Parallel.For(0, y.Length, i => y[i] += x[i]);
}
@ -70,12 +70,19 @@ namespace MathNet.Numerics.Algorithms.LinearAlgebra
}
}
/// <summary>
/// Scales an array. Can be used to scale a vector and a matrix.
/// </summary>
/// <param name="alpha">The scalar.</param>
/// <param name="x">The values to scale.</param>
/// <remarks>This is equivalent to the SCAL BLAS routine.</remarks>
public void ScaleArray(double alpha, double[] x)
{
if (alpha.AlmostEqual(1.0))
if (alpha == 1.0)
{
return;
}
Parallel.For(0, x.Length, i => x[i] = alpha * x[i]);
}
}

26
src/Numerics/Complex.cs

@ -206,12 +206,12 @@ namespace MathNet.Numerics
}
/// <summary>
/// Gets a value indicating whether whether the <c>Complex</c> is zero.
/// Gets a value indicating whether the <c>Complex</c> is zero.
/// </summary>
/// <value><c>true</c> if this instance is zero; otherwise, <c>false</c>.</value>
public bool IsZero
{
get { return _real.AlmostZero() && _imag.AlmostZero(); }
get { return _real == 0.0 && _imag == 0.0; }
}
/// <summary>
@ -220,7 +220,7 @@ namespace MathNet.Numerics
/// <value><c>true</c> if this instance is one; otherwise, <c>false</c>.</value>
public bool IsOne
{
get { return _real.AlmostEqual(1.0) && _imag.AlmostZero(); }
get { return _real == 1.0 && _imag == 0.0; }
}
/// <summary>
@ -229,7 +229,7 @@ namespace MathNet.Numerics
/// <value><c>true</c> if this instance is I; otherwise, <c>false</c>.</value>
public bool IsI
{
get { return _real.AlmostZero() && _imag.AlmostEqual(1.0); }
get { return _real == 0.0 && _imag == 1.0; }
}
/// <summary>
@ -267,7 +267,7 @@ namespace MathNet.Numerics
/// <value><c>true</c> if this instance is a real number; otherwise, <c>false</c>.</value>
public bool IsReal
{
get { return _imag.AlmostZero(); }
get { return _imag == 0.0; }
}
/// <summary>
@ -278,7 +278,7 @@ namespace MathNet.Numerics
/// </value>
public bool IsRealNonNegative
{
get { return _imag.AlmostZero() && _real >= 0; }
get { return _imag == 0.0 && _real >= 0; }
}
/// <summary>
@ -369,7 +369,7 @@ namespace MathNet.Numerics
// don't replace this with "Modulus"!
var mod = SpecialFunctions.Hypotenuse(_real, _imag);
if (mod.AlmostZero())
if (mod == 0.0)
{
return Zero;
}
@ -438,7 +438,7 @@ namespace MathNet.Numerics
if (exponent.Real < 0)
{
if (exponent.Imaginary.AlmostZero())
if (exponent.Imaginary == 0.0)
{
return new Complex(double.PositiveInfinity, 0.0);
}
@ -652,14 +652,14 @@ namespace MathNet.Numerics
var ret = new StringBuilder();
if (!_real.AlmostZero())
if (_real != 0.0)
{
ret.Append(_real.ToString(format, formatProvider));
}
if (!_imag.AlmostZero())
if (_imag != 0.0)
{
if (!_real.AlmostZero())
if (_real != 0.0)
{
if (_imag < 0)
{
@ -676,7 +676,7 @@ namespace MathNet.Numerics
if (ret.Length == 0)
{
ret.Append((0.0).ToString(format, formatProvider));
ret.Append(0.0.ToString(format, formatProvider));
}
return ret.ToString();
@ -910,7 +910,7 @@ namespace MathNet.Numerics
/// <param name="divisor">The divisor.</param>
public static Complex operator /(Complex dividend, double divisor)
{
if (divisor.AlmostZero())
if (divisor == 0.0)
{
return Infinity;
}

2
src/Numerics/Interpolation/Algorithms/AkimaSplineInterpolation.cs

@ -156,7 +156,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
for (int i = 2; i < derivatives.Length - 2; i++)
{
derivatives[i] =
weights[i - 1].AlmostZero() && weights[i + 1].AlmostZero()
weights[i - 1].AlmostEqual(0.0) && weights[i + 1].AlmostEqual(0.0)
? (((samplePoints[i + 1] - samplePoints[i]) * differences[i - 1])
+ ((samplePoints[i] - samplePoints[i - 1]) * differences[i]))
/ (samplePoints[i + 1] - samplePoints[i - 1])

4
src/Numerics/Interpolation/Algorithms/BulirschStoerRationalInterpolation.cs

@ -141,7 +141,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
for (int i = 0; i < n; i++)
{
double distance = Math.Abs(t - _points[i]);
if (distance.AlmostZero())
if (distance.AlmostEqual(0.0))
{
return _values[i];
}
@ -166,7 +166,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
double ho = (_points[i] - t) * d[i] / hp;
double den = ho - c[i + 1];
if (den.AlmostZero())
if (den.AlmostEqual(0.0))
{
return double.NaN; // zero-div, singularity
}

4
src/Numerics/LinearAlgebra/Double/DenseVector.cs

@ -226,7 +226,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// <param name="scalar">The scalar to add.</param>
public override void Add(double scalar)
{
if (scalar.AlmostZero())
if (scalar == 0.0)
{
return;
}
@ -379,7 +379,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// <param name="scalar">The scalar to subtract.</param>
public override void Subtract(double scalar)
{
if (scalar.AlmostZero())
if (scalar == 0.0)
{
return;
}

7
src/Numerics/LinearAlgebra/Double/Vector.cs

@ -31,7 +31,6 @@ namespace MathNet.Numerics.LinearAlgebra.Double
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using Properties;
@ -117,7 +116,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// <param name="scalar">The scalar to add.</param>
public virtual void Add(double scalar)
{
if (scalar.AlmostZero())
if (scalar == 0.0)
{
return;
}
@ -223,7 +222,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// <param name="scalar">The scalar to subtract.</param>
public virtual void Subtract(double scalar)
{
if (scalar.AlmostZero())
if (scalar == 0.0)
{
return;
}
@ -667,7 +666,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
{
var norm = Norm();
var clone = Clone();
if (norm.AlmostZero())
if (norm == 0.0)
{
return clone;
}

176
src/Numerics/Precision.cs

@ -71,33 +71,7 @@ namespace MathNet.Numerics
private const int SinglePrecision = 24;
#endregion
#region Properties
/// <summary>
/// Gets the maximum relative precision of a double.
/// </summary>
/// <value>The maximum relative precision of a double.</value>
public static double DoubleMachinePrecision
{
get
{
return _doubleMachinePrecision;
}
}
/// <summary>
/// Gets the maximum relative precision of a single.
/// </summary>
/// <value>The maximum relative precision of a single.</value>
public static double SingleMachinePrecision
{
get
{
return _singleMachinePrecision;
}
}
#endregion
#region Fields
/// <summary>
@ -125,6 +99,32 @@ namespace MathNet.Numerics
#endregion
#region Properties
/// <summary>
/// Gets the maximum relative precision of a double.
/// </summary>
/// <value>The maximum relative precision of a double.</value>
public static double DoubleMachinePrecision
{
get
{
return _doubleMachinePrecision;
}
}
/// <summary>
/// Gets the maximum relative precision of a single.
/// </summary>
/// <value>The maximum relative precision of a single.</value>
public static double SingleMachinePrecision
{
get
{
return _singleMachinePrecision;
}
}
#endregion
/// <summary>
/// Initializes static members of the Precision class.
/// </summary>
@ -440,7 +440,7 @@ namespace MathNet.Numerics
/// Forces small numbers near zero to zero.
/// </summary>
/// <param name="a">The real number to coerce to zero, if it is almost zero.</param>
/// <returns>Zero if |<paramref name="a"/>| is smaller than 10*2^(-52) = 0.22e-14, <paramref name="a"/> otherwise.</returns>
/// <returns>Zero if |<paramref name="a"/>| is smaller than 2^(-53) = 1.11e-16, <paramref name="a"/> otherwise.</returns>
public static double CoerceZero(this double a)
{
return CoerceZero(a, _doubleMachinePrecision);
@ -682,65 +682,6 @@ namespace MathNet.Numerics
return (a >= b) ? (ulong)(intA - intB) : (ulong)(intB - intA);
}
/// <summary>
/// True if the given number is almost equal to zero, according to the specified absolute accuracy.
/// </summary>
/// <param name="a">The real number to check for being almost zero.</param>
/// <param name="maxNumbersBetween">The maximum number of floating point values between the two values. Must be 1 or larger.</param>
/// <returns>
/// True if |<paramref name="a"/>| is less than <paramref name="maxNumbersBetween"/> steps from zero, False otherwise.
/// </returns>
public static bool AlmostZero(this double a, long maxNumbersBetween)
{
if (maxNumbersBetween < 0)
{
throw new ArgumentOutOfRangeException("maxNumbersBetween");
}
if (double.IsNaN(a) || double.IsInfinity(a))
{
return false;
}
ulong realNumbersBetween = NumbersBetween(0.0, a);
return realNumbersBetween <= (ulong)maxNumbersBetween;
}
/// <summary>
/// True if the given number is almost equal to zero, according to the specified absolute accuracy.
/// </summary>
/// <param name="a">The real number to check for being almost zero.</param>
/// <param name="maximumAbsoluteError">The absolute threshold for <paramref name="a"/> to consider it as zero.</param>
/// <returns>
/// True if |<paramref name="a"/>| is smaller than <paramref name="maximumAbsoluteError"/>, False otherwise.
/// </returns>
public static bool AlmostZero(this double a, double maximumAbsoluteError)
{
if (maximumAbsoluteError < 0)
{
throw new ArgumentOutOfRangeException("maximumAbsoluteError");
}
if (double.IsNaN(a) || double.IsInfinity(a))
{
return false;
}
return Math.Abs(a) < maximumAbsoluteError;
}
/// <summary>
/// True if the given number is almost equal to zero.
/// </summary>
/// <param name="a">The real number to check for being almost zero.</param>
/// <returns>
/// True if |<paramref name="a"/>| is smaller than 10*2^(-52) = 0.22e-14, False otherwise.
/// </returns>
public static bool AlmostZero(this double a)
{
return AlmostZero(a, _doubleMachinePrecision);
}
/// <summary>
/// Checks whether two real numbers are almost equal.
/// </summary>
@ -749,7 +690,8 @@ namespace MathNet.Numerics
/// <returns>true if the two values differ by no more than 10 * 2^(-52); false otherwise.</returns>
public static bool AlmostEqual(this double a, double b)
{
return AlmostEqualWithError(a, b, a - b, _defaultRelativeAccuracy);
double diff = a - b;
return AlmostEqualWithError(a, b, diff, _defaultRelativeAccuracy);
}
/// <summary>
@ -762,7 +704,8 @@ namespace MathNet.Numerics
public static bool AlmostEqual<T>(this T a, T b)
where T : IPrecisionSupport<T>
{
return AlmostEqualWithError(a.Norm(), b.Norm(), a.NormOfDifference(b), _defaultRelativeAccuracy);
double diff = a.NormOfDifference(b);
return AlmostEqualWithError(a.Norm(), b.Norm(), diff, _defaultRelativeAccuracy);
}
/// <summary>
@ -912,7 +855,7 @@ namespace MathNet.Numerics
return false;
}
if (AlmostZero(a) || AlmostZero(b))
if (Math.Abs(a) < _doubleMachinePrecision || Math.Abs(b) < _doubleMachinePrecision)
{
return AlmostEqualWithAbsoluteError(a, b, diff, maximumError);
}
@ -1036,6 +979,11 @@ namespace MathNet.Numerics
{
return a == b;
}
if (Math.Abs(a) < _doubleMachinePrecision || Math.Abs(b) < _doubleMachinePrecision)
{
return AlmostEqualWithAbsoluteDecimalPlaces(a, b, decimalPlaces);
}
// If both numbers are equal, get out now. This should remove the possibility of both numbers being zero
// and any problems associated with that.
@ -1044,11 +992,6 @@ namespace MathNet.Numerics
return true;
}
if (AlmostZero(a) || AlmostZero(b))
{
return AlmostEqualWithAbsoluteDecimalPlaces(a, b, decimalPlaces);
}
return AlmostEqualWithRelativeDecimalPlaces(a, b, decimalPlaces);
}
@ -1385,5 +1328,48 @@ namespace MathNet.Numerics
// larger than the second.
return a.CompareTo(b);
}
/// <summary>
/// Evaluates the minimum distance to the next distinguishable number near the argument value.
/// </summary>
/// <param name="value">The value used to determine the minimum distance.</param>
/// <returns>
/// Relative Epsilon (positive double or NaN).
/// </returns>
/// <remarks>Evaluates the <b>negative</b> epsilon. The more common positive epsilon is equal to two times this negative epsilon.</remarks>
/// <seealso cref="PositiveEpsilonOf(double)"/>
public static double EpsilonOf(this double value)
{
if (double.IsInfinity(value) || double.IsNaN(value))
{
return double.NaN;
}
long signed64 = BitConverter.DoubleToInt64Bits(value);
if (signed64 == 0)
{
signed64++;
return BitConverter.Int64BitsToDouble(signed64) - value;
}
if (signed64-- < 0)
{
return BitConverter.Int64BitsToDouble(signed64) - value;
}
return value - BitConverter.Int64BitsToDouble(signed64);
}
/// <summary>
/// Evaluates the minimum distance to the next distinguishable number near the argument value.
/// </summary>
/// <param name="value">The value used to determine the minimum distance.</param>
/// <returns>Relative Epsilon (positive double or NaN)</returns>
/// <remarks>Evaluates the <b>positive</b> epsilon. See also <see cref="EpsilonOf"/></remarks>
/// <seealso cref="EpsilonOf(double)"/>
public static double PositiveEpsilonOf(this double value)
{
return 2 * EpsilonOf(value);
}
}
}

2
src/Numerics/SpecialFunctions/Stability.cs

@ -45,7 +45,7 @@ namespace MathNet.Numerics
return Math.Exp(power) - 1.0;
}
if (x < Precision.DoubleMachinePrecision)
if (x < x.PositiveEpsilonOf())
{
return x;
}

27
src/UnitTests/PrecisionTest.cs

@ -184,6 +184,8 @@ namespace MathNet.Numerics.UnitTests
public void CoerceZero()
{
Assert.AreEqual<double>(0.0, Precision.CoerceZero(0d));
Console.WriteLine(0.0.EpsilonOf());
Console.WriteLine(Precision.Increment(0.0));
Assert.AreEqual<double>(0.0, Precision.CoerceZero(Precision.Increment(0.0)));
Assert.AreEqual<double>(0.0, Precision.CoerceZero(Precision.Decrement(0.0)));
@ -450,31 +452,6 @@ namespace MathNet.Numerics.UnitTests
Assert.AreEqual<ulong>(3, Precision.NumbersBetween(double.Epsilon, -2 * double.Epsilon));
}
// AlmostZero
[Test]
public void AlmostZeroWithMaxNumbersBetween()
{
Assert.IsTrue(Precision.AlmostZero(0, 1));
Assert.IsTrue(Precision.AlmostZero(1 * double.Epsilon, 1));
Assert.IsTrue(Precision.AlmostZero(10 * double.Epsilon, 10));
Assert.IsFalse(Precision.AlmostZero(double.NegativeInfinity, 1));
Assert.IsFalse(Precision.AlmostZero(double.PositiveInfinity, 1));
Assert.IsFalse(Precision.AlmostZero(double.NaN, 1));
}
[Test]
public void AlmostZeroWithTolerance()
{
Assert.IsTrue(Precision.AlmostZero(0));
Assert.IsTrue(Precision.AlmostZero(1 * double.Epsilon, 2 * double.Epsilon));
Assert.IsTrue(Precision.AlmostZero(10 * double.Epsilon, 20 * double.Epsilon));
Assert.IsFalse(Precision.AlmostZero(double.NegativeInfinity, 1.0));
Assert.IsFalse(Precision.AlmostZero(double.PositiveInfinity, 1.0));
Assert.IsFalse(Precision.AlmostZero(double.NaN, 1.0));
}
[Test]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void AlmostEqualWithMaxNumbersBetweenWithLessThanOneNumber()

228
src/UnitTests/UnitTests.csproj

@ -121,6 +121,234 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\..\data\NIST\AtmWtAgt.dat">
<Link>data\NIST\AtmWtAgt.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Bennett5.dat">
<Link>data\NIST\Bennett5.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\BoxBOD.dat">
<Link>data\NIST\BoxBOD.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Chwirut1.dat">
<Link>data\NIST\Chwirut1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Chwirut2.dat">
<Link>data\NIST\Chwirut2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\DanWood.dat">
<Link>data\NIST\DanWood.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Eckerle4.dat">
<Link>data\NIST\Eckerle4.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\ENSO.dat">
<Link>data\NIST\ENSO.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Filip.dat">
<Link>data\NIST\Filip.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Gauss1.dat">
<Link>data\NIST\Gauss1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Gauss2.dat">
<Link>data\NIST\Gauss2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Gauss3.dat">
<Link>data\NIST\Gauss3.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Hahn1.dat">
<Link>data\NIST\Hahn1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Kirby2.dat">
<Link>data\NIST\Kirby2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Lanczos1.dat">
<Link>data\NIST\Lanczos1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Lanczos2.dat">
<Link>data\NIST\Lanczos2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Lanczos3.dat">
<Link>data\NIST\Lanczos3.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Lew.dat">
<Link>data\NIST\Lew.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Longley.dat">
<Link>data\NIST\Longley.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Lottery.dat">
<Link>data\NIST\Lottery.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Mavro.dat">
<Link>data\NIST\Mavro.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\MGH09.dat">
<Link>data\NIST\MGH09.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\MGH10.dat">
<Link>data\NIST\MGH10.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\MGH17.dat">
<Link>data\NIST\MGH17.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Michelso.dat">
<Link>data\NIST\Michelso.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Misra1a.dat">
<Link>data\NIST\Misra1a.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Misra1b.dat">
<Link>data\NIST\Misra1b.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Misra1c.dat">
<Link>data\NIST\Misra1c.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Misra1d.dat">
<Link>data\NIST\Misra1d.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Nelson.dat">
<Link>data\NIST\Nelson.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NoInt1.dat">
<Link>data\NIST\NoInt1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NoInt2.dat">
<Link>data\NIST\NoInt2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Norris.dat">
<Link>data\NIST\Norris.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NumAcc1.dat">
<Link>data\NIST\NumAcc1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NumAcc2.dat">
<Link>data\NIST\NumAcc2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NumAcc3.dat">
<Link>data\NIST\NumAcc3.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\NumAcc4.dat">
<Link>data\NIST\NumAcc4.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Pontius.dat">
<Link>data\NIST\Pontius.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Rat42.dat">
<Link>data\NIST\Rat42.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Rat43.dat">
<Link>data\NIST\Rat43.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Roszman1.dat">
<Link>data\NIST\Roszman1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SiRstvt.dat">
<Link>data\NIST\SiRstvt.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs01t.dat">
<Link>data\NIST\SmLs01t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs02t.dat">
<Link>data\NIST\SmLs02t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs03t.dat">
<Link>data\NIST\SmLs03t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs04t.dat">
<Link>data\NIST\SmLs04t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs05t.dat">
<Link>data\NIST\SmLs05t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs06t.dat">
<Link>data\NIST\SmLs06t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs07t.dat">
<Link>data\NIST\SmLs07t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs08t.dat">
<Link>data\NIST\SmLs08t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\SmLs09t.dat">
<Link>data\NIST\SmLs09t.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Thurber.dat">
<Link>data\NIST\Thurber.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Wampler1.dat">
<Link>data\NIST\Wampler1.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Wampler2.dat">
<Link>data\NIST\Wampler2.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Wampler3.dat">
<Link>data\NIST\Wampler3.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Wampler4.dat">
<Link>data\NIST\Wampler4.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\NIST\Wampler5.dat">
<Link>data\NIST\Wampler5.dat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\MathNet.Numerics.snk">
<Link>MathNet.Numerics.snk</Link>
</None>

Loading…
Cancel
Save