RosettaCodeData/Task/Demings-funnel/FutureBasic/demings-funnel.basic

89 lines
3.6 KiB
Plaintext

include "NSLog.incl"
// --- Mean calculation ---
double local fn mean( array as CFArrayRef )
double sum = 0.0
for CFNumberRef num in array
sum += fn NumberDoubleValue( num )
next
end fn = sum / fn ArrayCount( array )
// --- Standard deviation calculation ---
double local fn stddev( array as CFArrayRef )
double meanValue = fn mean(array)
double sum = 0.0
for CFNumberRef num in array
double diff = fn NumberDoubleValue( num ) - meanValue
sum += diff * diff
next
end fn = fn sqrt(sum / fn ArrayCount( array ) )
void local fn DemingFunnel
CFArrayRef dx = @[
@(-0.533), @(0.270), @(0.859), @(-0.043), @(-0.205), @(-0.127), @(-0.071), @(0.275),
@(1.251), @(-0.231), @(-0.401), @(0.269), @(0.491), @(0.951), @(1.150), @(0.001),
@(-0.382), @(0.161), @(0.915), @(2.080), @(-2.337), @(0.034), @(-0.126), @(0.014),
@(0.709), @(0.129), @(-1.093), @(-0.483), @(-1.193), @(0.020), @(-0.051), @(0.047),
@(-0.095), @(0.695), @(0.340), @(-0.182), @(0.287), @(0.213), @(-0.423), @(-0.021),
@(-0.134), @(1.798), @(0.021), @(-1.099), @(-0.361), @(1.636), @(-1.134), @(1.315),
@(0.201), @(0.034), @(0.097), @(-0.170), @(0.054), @(-0.553), @(-0.024), @(-0.181),
@(-0.700), @(-0.361), @(-0.789), @(0.279), @(-0.174), @(-0.009), @(-0.323), @(-0.658),
@(0.348), @(-0.528), @(0.881), @(0.021), @(-0.853), @(0.157), @(0.648), @(1.774),
@(-1.043), @(0.051), @(0.021), @(0.247), @(-0.310), @(0.171), @(0.000), @(0.106),
@(0.024), @(-0.386), @(0.962), @(0.765), @(-0.125), @(-0.289), @(0.521), @(0.017),
@(0.281), @(-0.749), @(-0.149), @(-2.436), @(-0.909), @(0.394), @(-0.113), @(-0.598),
@(0.443), @(-0.521), @(-0.799), @(0.087)]
CFArrayRef dy = @[
@(0.136), @(0.717), @(0.459), @(-0.225), @(1.392), @(0.385), @(0.121), @(-0.395),
@(0.490), @(-0.682), @(-0.065), @(0.242), @(-0.288), @(0.658), @(0.459), @(0.000),
@(0.426), @(0.205), @(-0.765), @(-2.188), @(-0.742), @(-0.010), @(0.089), @(0.208),
@(0.585), @(0.633), @(-0.444), @(-0.351), @(-1.087), @(0.199), @(0.701), @(0.096),
@(-0.025), @(-0.868), @(1.051), @(0.157), @(0.216), @(0.162), @(0.249), @(-0.007),
@(0.009), @(0.508), @(-0.790), @(0.723), @(0.881), @(-0.508), @(0.393), @(-0.226),
@(0.710), @(0.038), @(-0.217), @(0.831), @(0.480), @(0.407), @(0.447), @(-0.295),
@(1.126), @(0.380), @(0.549), @(-0.445), @(-0.046), @(0.428), @(-0.074), @(0.217),
@(-0.822), @(0.491), @(1.347), @(-0.141), @(1.230), @(-0.044), @(0.079), @(0.219),
@(0.698), @(0.275), @(0.056), @(0.031), @(0.421), @(0.064), @(0.721), @(0.104),
@(-0.729), @(0.650), @(-1.103), @(0.154), @(-1.720), @(0.051), @(-0.385), @(0.477),
@(1.537), @(-0.901), @(0.939), @(-0.411), @(0.341), @(-0.411), @(0.106), @(0.224),
@(-0.947), @(-1.424), @(-0.542), @(-1.032)]
for int rule = 1 to 4
NSLog( @"\nRule %d", rule )
CFMutableArrayRef ddx = fn MutableArrayNew
double tx = 0
for CFNumberRef x in dx
double xv = fn NumberDoubleValue( x )
MutableArrayAddObject( ddx, @(tx + xv) )
if (rule == 1) then tx = 0
if (rule == 2) then tx = -xv
if (rule == 3) then tx = -tx - xv
if (rule == 4) then tx = tx + xv
next
CFMutableArrayRef ddy = fn MutableArrayNew
double ty = 0
for CFNumberRef y in dy
double yv = fn NumberDoubleValue( y )
MutableArrayAddObject( ddy, @(ty + yv) )
// Apply transformation rule manually
if (rule == 1) then ty = 0
if (rule == 2) then ty = -yv
if (rule == 3) then ty = -ty - yv
if (rule == 4) then ty = ty + yv
next
NSLog( @"Mean x, y : %7.4f %7.4f", fn mean(ddx), fn mean(ddy) )
NSLog( @"Std dev x, y : %7.4f %7.4f", fn stddev(ddx), fn stddev(ddy) )
next
end fn
fn DemingFunnel
HandleEvents