\ Gemiddelde en mediaan naar A.N's opgave

: MID5  ( a b c d e -- gem )    \ V1 Voor kleine getallen
    + + + +  5 / ;

need M+
: MID5  ( a b c d e -- gem )    \ V2 Voor grote unsigned getallen
    >r >r >r >r  0
    r> m+  r> m+  r> m+  r> m+
    5 um/mod nip ;


\ Simpele bubblesort van klein naar groot op de stack
: MED5  ( a b c d e -- med )    \ V1
    4 for
        >r >r >r
           2dup > if swap then
        r> 2dup > if swap then
        r> 2dup > if swap then
        r> 2dup > if swap then
    next
    2drop  nip nip ;


\ Dit is een vertaling van een C-algoritme
\ Het gooit de kleinste en grootste van de de bovenste vier weg
\ Daarna bepaalt het van de overgebleven drie de mediaan

\ De looptijd van dit algoritme is altijd hetzelfde!
: MED5  ( a b c d e -- med )    \ V2     R-stack
    2dup min >r             \ a b c d e   -de           kleinste van d-e
    2over min >r            \ a b c d e   -de -bc       kleinste van b-c
    max >r                  \ a b c       -de -bc +de   grootste van d-e
    max  r> min             \ a g         -de -bc       grootste van b-c en kleinste van resultaten = g
    2r> max                 \ a g f       -             grootste van kleinste resulaten = f
    2dup min >r             \ a g f       -gf           kleinste van g-f
    max                     \ a +gf       -gf           grootste van g-f
    min                     \ -a+gf       -gf           kleinste van gf-a
    r> max ;                \ med         -             grootste van g-f en gf-a = mediaam



700 704 695 699 702 med5 .  \ 700 -
700 704 695 699 2 med5 .    \ 699 -
700 704 695 699 2002 med5 . \ 700 -
2002 699 595 704 700 med5 . \ 700 -
