benchmark1.frink

View or download benchmark1.frink in plain text format


// Compares against Mathematica benchmarks:
//http://www.wolfram.com/products/mathematica/newin5/performance/bignumber.html

use root.frink

setPrecision[1000]

randomFloat[bits] :=
{
   n = randomBits[bits]
   d = 2^random[bits]
   return 1. n/d
}

println["\nRunning timing loops..."]

for iter = 1 to 5
{
   println["Iteration $iter:"]

   // Multiplying 2 1000-digit reals
   limit = 10000
   n1 = randomFloat[ceil[log[10]/log[2] * 1000]]
   n2 = randomFloat[ceil[log[10]/log[2] * 1000]]
//   println[n1]
//   println[n2]

   start = now[]
   for i = 1 to limit
   {
//      c = n1 * n1
//      println[c]
   }

   end = now[]
   println["r*r: "]
   println["The loop took " + (end - start -> seconds) + " seconds."]
   if (end - start > 0 s)
   {
      println["This is " + (limit / (end-start) -> s^-1) + " operations/sec."]
      println["     or " + ((end-start) / limit -> s) + " sec/operation.\n"]
   }


   // Multiplying 2 1000-digit integers 10000 times
   limit = 10000

   bits = ceil[log[10]/log[2] * 1000]
   r1 = randomBits[bits]
   r2 = randomBits[bits]

   start = now[]
   for i = 1 to limit
      c = r1 * r2

   end = now[]
   println["Multiplying integers: "]
   println["The loop took " + (end - start -> seconds) + " seconds."]
   if (end - start > 0 s)
   {
      println["This is " + (limit / (end-start) -> s^-1) + " operations/sec."]
      println["     or " + ((end-start) / limit -> s) + " sec/operation.\n"]
   }

   n = randomBits[ceil[log[10]/log[2] * 100000]]
   d = randomBits[ceil[log[10]/log[2] * 100]]

   start = now[]

   limit = 100
   for i = 1 to limit
      c = n/d

   end = now[]
   println["gcd: "]
   println["The loop took " + (end - start -> seconds) + " seconds."]
   if (end - start > 0 s)
   {
      println["This is " + (limit / (end-start) -> s^-1) + " operations/sec."]
      println["     or " + ((end-start) / limit -> s) + " sec/operation.\n"]
   }

   start = now[]

   limit = 10
   n = randomFloat[ceil[log[10]/log[2] * 1000]]

   println[n]

   for i = 1 to limit
      c = root[n, 2, 1e-500]

   end = now[]
   println["sqrt: "]
   println["The loop took " + (end - start -> seconds) + " seconds."]
   if (end - start > 0 s)
   {
      println["This is " + (limit / (end-start) -> s^-1) + " operations/sec."]
      println["     or " + ((end-start) / limit -> s) + " sec/operation.\n"]
   }
}


View or download benchmark1.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, 6 hours, 33 minutes ago.