110 lines
2.2 KiB
Plaintext
110 lines
2.2 KiB
Plaintext
'----------------------
|
|
' definition of a "measurement" type with value and uncartainty
|
|
' and operators that can operate on them
|
|
'---------------------
|
|
|
|
#macro p2(x)
|
|
(x)*(x)
|
|
#endmacro
|
|
|
|
type meas
|
|
vlu as double
|
|
unc as double
|
|
end type
|
|
|
|
operator + ( a as meas, b as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu + b.vlu
|
|
ret.unc = sqr( a.unc*a.unc + b.unc*b.unc )
|
|
return ret
|
|
end operator
|
|
|
|
operator + ( c as double, a as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu + c
|
|
ret.unc = a.unc
|
|
return ret
|
|
end operator
|
|
|
|
operator + ( a as meas, c as double ) as meas
|
|
return c+a
|
|
end operator
|
|
|
|
operator - ( a as meas, b as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu - b.vlu
|
|
ret.unc = sqr( a.unc*a.unc + b.unc*b.unc )
|
|
return ret
|
|
end operator
|
|
|
|
operator - ( c as double, a as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu - c
|
|
ret.unc = a.unc
|
|
return ret
|
|
end operator
|
|
|
|
operator - ( a as meas, c as double ) as meas
|
|
dim ret as meas
|
|
ret.vlu = c - a.vlu
|
|
ret.unc = a.unc
|
|
return ret
|
|
end operator
|
|
|
|
operator * ( a as meas, b as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu*b.vlu
|
|
ret.unc = sqr(p2(ret.vlu) * (p2(a.unc/a.vlu)+p2(b.unc/b.vlu)))
|
|
return ret
|
|
end operator
|
|
|
|
operator * ( c as double, a as meas ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu*c
|
|
ret.unc = abs(c*a.unc)
|
|
return ret
|
|
end operator
|
|
|
|
operator * ( a as meas, c as double ) as meas
|
|
return c*a
|
|
end operator
|
|
|
|
operator ^ ( a as meas, c as double ) as meas
|
|
dim ret as meas
|
|
ret.vlu = a.vlu ^ c
|
|
ret.unc = abs(ret.vlu*c*a.unc/a.vlu)
|
|
return ret
|
|
end operator
|
|
|
|
operator / ( c as double, a as meas ) as meas
|
|
return c*a^(-1)
|
|
end operator
|
|
|
|
operator / ( a as meas, c as double ) as meas
|
|
return a*(1.0/c)
|
|
end operator
|
|
|
|
operator / ( a as meas, b as meas ) as meas
|
|
return b*a^(-1)
|
|
end operator
|
|
|
|
sub printm( a as meas )
|
|
print using "####.##### +- ####.####"; a.vlu; a.unc
|
|
end sub
|
|
|
|
'--------------------------------
|
|
' now the results
|
|
'--------------------------------
|
|
|
|
dim as meas x1, y1, x2, y2
|
|
x1.vlu = 100.
|
|
x1.unc = 1.1
|
|
y1.vlu = 50.
|
|
y1.unc = 1.2
|
|
x2.vlu = 200.
|
|
x2.unc = 2.2
|
|
y2.vlu = 100.
|
|
y2.unc = 2.3
|
|
|
|
printm( ((x1-x2)^2 + (y1-y2)^2)^0.5 )
|