USING: arrays kernel locals math math.functions math.vectors prettyprint sequences sequences.extras ; IN: uncertain ( v1 s1 v2 s2 ) v1 v2 quot call :> val s1 v1 /f sq s2 v2 /f sq + val sq * sqrt :> sig val sig 2array ; inline PRIVATE> : u+n ( u n -- u ) 0 2array v+ ; : n+u ( n u -- u ) swap u+n ; : u-n ( u n -- u ) 0 2array v- ; : n-u ( n u -- u ) [ 0 2array ] dip v- ; : u+ ( u u -- u ) [ + ] [ err+ ] ubi* ; : u- ( u u -- u ) [ - ] [ err+ ] ubi* ; : u*n ( u n -- u ) dup 2array [ * ] [ * abs ] ubi* ; : n*u ( n u -- u ) swap u*n ; : u/n ( u n -- u ) dup 2array [ /f ] [ * abs ] ubi* ; : n/u ( n u -- u ) [ dup 2array ] dip [ /f ] [ * abs ] ubi* ; : u* ( u u -- u ) [ * ] (u*) ; : u/ ( u u -- u ) [ /f ] (u*) ; :: u^n ( u n -- u ) u first2 :> ( v1 s1 ) v1 n ^ >rect drop :> val val n * s1 v1 /f * abs :> sig val sig 2array ; MAIN: uncertain-demo