in reply to Re: sub as mathematical function
in thread sub as mathematical function

min(int(9*$x),8) is perfect thanks all :-)

Replies are listed 'Best First'.
Re^3: sub as mathematical function
by LanX (Saint) on Sep 04, 2019 at 13:08 UTC
    Oh ... off by max, again! ;-)

    update

    I wouldn't count on correct input though, and additional max seems safe

    DB<5> print $_,":",max(min(int(9*$_/18),8),0),"\n" for -2..20 -2:0 -1:0 0:0 1:0 2:1 3:1 4:2 5:2 6:3 7:3 8:4 9:4 10:5 11:5 12:6 13:6 14:7 15:7 16:8 17:8 18:8 19:8 20:8

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      The subexpression 9*X/18 == (9x)/18 == x/2. Therefore, max(min(int($_ / 2), 8, 0);


      Dave

        The core of the formula was 9*$v I was just trying to cover all edges cases for $v in a one liner.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Re^3: sub as mathematical function
by rsFalse (Chaplain) on Sep 04, 2019 at 17:06 UTC
    >> min(int(9*$x),8)

    When number of intervals vary (not only 9), then this looks more general:
    my $intervals = 9; min( int( $intervals * $x ), $intervals - 1 )
    or:
    my $intervals = 9; int( $intervals * $x ) - int $x