private void Run_Add_Int_Float(Random r) { var a = r.Next(-10000, 10000); var b = (float)(r.NextDouble() * r.Next(-10000, 10000)); var result = a + b; LoopBase(() => result = a + b); var fa = Fixed.FromInt(a); var fb = Fixed.FromFloat(b); var fresult = fa + fb; LoopFixed(() => fresult = fa + fb); if (!Fixed.Approximately(fresult, Fixed.FromFloat(result))) { throw new InvalidOperationException(); } }
private void Run_Divide_Int_Int(Random r) { var a = r.Next(-1000, 1000); var b = r.Next(-1000, 1000); if (b == 0) { b = 1; } var result = (float)a / b; LoopBase(() => result = (float)a / b); var fa = Fixed.FromInt(a); var fb = Fixed.FromInt(b); var fresult = fa / fb; LoopFixed(() => fresult = fa / fb); if (!Fixed.Approximately(fresult, Fixed.FromFloat(result))) { throw new InvalidOperationException(); } }
static void AssertApproximately(Fixed expected, Fixed actual) { Assert.True(Fixed.Approximately(expected, actual)); }