Download or view floatTiming.frink in plain text format
/** This program tests floating-point timing for a large number of digits. It
also calculates the Big-O notation (which should be O(n^something)) where n is
the number of digits being calculated. */
runs = million
lastTime = undef
lastIterations = undef
lastPrecision = undef
n1 = 1.
d1 = 7.
n2 = 2
d2 = 17.
for n = 1 to 3
{
lastIterations = 0
lastTime = 0 s
lastPrec = 0
multifor [p, m] = [1 to 7, [1,2]]
{
prec = m 10^p
iterations = ceil[10^(7-p) / m]
setPrecision[prec]
a = n1/d1
b = n2/d2
start = now[]
for r = 1 to iterations
{
c = a / b
}
end = now[]
setPrecision[20]
time = end-start
print["precision=$prec "]
if m == 2
print[" "]
print["iterations=$iterations "]
print["Time:" (time -> "ms")]
// Calculate Big-O exponent O(n^x)
if lastTime != undef and lastTime != 0 s and time != 0 s and lastIterations != 0 and iterations != 0 and lastPrec != 0
{
iterTime = time/iterations
lastIterTime = lastTime / lastIterations
x = log[iterTime/lastIterTime] / log[prec/lastPrec]
// t = c prec^x (solve for c)
// Constant factor c solved via
// https://frinklang.org/fsp/solve.fsp?eq=t+%3D+c+prec%5Ex&solveFor=c
c = prec^(-x) iterTime
println[" O(n^" + formatFix[x,1,3] + ")\t" + formatSig[c,"s",6] + " n^" + formatFix[x,1,3]]
} else
println[]
lastTime = time
lastPrec = prec
lastIterations = iterations
}
}
Download or view floatTiming.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 20218 days, 0 hours, 11 minutes ago.