intervaltest.frink

View or download intervaltest.frink in plain text format


// This is an external test to validate Frink's internal interval arithmetic.
// Ordinarily, multiplication of intervals make take 8 multiplications (or 16,
// if you're doing it rigorously.)  You can break this down into 9 different
// cases and perform 8 of those with 2 multiplications, and 4 for the remaining
// case.  Of course, the probability of introducing error in any of those
// cases increases.  This program tests the naive method against Frink's
// internal methods.

for xl = -5 to 5 step 1/2
   for xh = xl to 6 step 1/2
      for yl = -5 to 5 step 1/2
         for yh = yl to 6 step 1/2
         {
            naiveMultiply[[xl,xh],[yl,yh]]
            naivePower[[xl,xh],[yl,yh]]
         }

// Multiply two arrays naively.
naiveMultiply[x,y] :=
{
   [xl, xh] = x
   [yl, yh] = y

   array = [xl*yl, xl*yh, xh*yl, xh*yh]
   lo = min[array]
   hi = max[array]

   if lo==hi
      println[lo]
   else
      println[[lo,hi]]
   println[new interval[xl, xh] * new interval[yl, yh]]
}

// Exponentiate two arrays naively.
naivePower[x,y] :=
{
   [xl, xh] = x
   if ((xl>0) and (xh > 0))
   {
      [yl, yh] = y

      array = [xl^yl, xl^yh, xh^yl, xh^yh]
      lo = min[array]
      hi = max[array]

      if lo==hi
         println["$x^$y $lo"]
      else
         println["$x^$y [$lo, $hi]"]
      println["$x^$y " + new interval[xl, xh] ^ new interval[yl, yh]]
   }
}


View or download intervaltest.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 17592 days, 15 hours, 39 minutes ago.