Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.os.linux.advocacy > #465453

Re: The substantiation that -highhorse asked for

From owl <owl@rooftop.invalid>
Newsgroups comp.os.linux.advocacy
Subject Re: The substantiation that -highhorse asked for
Date 2018-08-31 16:53 +0000
Organization O.W.L.
Message-ID <sz9b3l3ga.h3i@rooftop.invalid> (permalink)
References (8 earlier) <JgxhD.7$UI2.1@fx18.iad> <g89z0b083.a44@rooftop.invalid> <f045ebee-7115-4ccc-8573-89e47422d3d0@googlegroups.com> <z8b003a.ba9o3g@rooftop.invalid> <40348344-ce24-48a0-ad42-30aee4f5b7d9@googlegroups.com>

Show all headers | View raw


Steve Carroll <fretwizzer@gmail.com> wrote:
> On Friday, August 31, 2018 at 6:33:13 AM UTC-6, owl wrote:
>> Steve Carroll <fretwizzer@gmail.com> wrote:
>> > On Wednesday, August 29, 2018 at 8:31:19 AM UTC-6, owl wrote:
>> >> DFS <nospam@nospam.com> wrote:
>> >> > On 8/29/2018 2:14 AM, owl wrote:
>> >> >> DFS <nospam@nospam.com> wrote:
>> >> >>>
>> >> >>> import random
>> >> >>>
>> >> >>> print "Group 1: r<0"
>> >> >>> print "Group 2: r==0"
>> >> >>> print "Group 3: r>0 && r<=10"
>> >> >>> print "Group 4: r>10 && r<=100"
>> >> >>> print "Group 5: r>100 && r<=1000"
>> >> >>> print "Group 6: r>1000 && r<=10000"
>> >> >>> print "Group 7: r>10000 && r<=100000"
>> >> >>> print "Group 8: r>100000 && r<=1000000"
>> >> >>> print "Group 9: r>1000000"
>> >> >>>
>> >> >>> def printgroup(grp):
>> >> >>>         print "Found random number " + str(r) + " in Group " + str(grp)
>> >> >>>
>> >> >>> for j in range(20):
>> >> >>>         r = random.randint(-1000,1001)
>> >> >>>         if r < 0:               printgroup(1); exit
>> >> >>>         if r > 1000000: printgroup(9); exit
>> >> >>>         comps =
>> >> >>> [(-1,0),(1,10),(11,100),(101,1000),(1001,10000),(10001,100000),(100001,1000000)]
>> >> >>>         for i, x in enumerate(range(len(comps))):
>> >> >>>                 if r > comps[i][0] and r <= comps[i][1]: printgroup(i+2); exit
>> >> >>>                 i+=1
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> That's 3 if-then-exits to handle 9 comparisons
>> >> >> 
>> >> >> If you call that 3 ifs, then I get to call this zero ifs:
>> >> >> 
>> >> >> anon@lowtide:~/code/ifs$ cat goo.c
>> >> >> #include <stdio.h>
>> >> >> #include <stdlib.h>
>> >> >> 
>> >> >> void flz(void){printf("a<0\n");}
>> >> >> void fgm(void){printf("a>1000000\n");}
>> >> >> void f0(void){printf("a==0\n");}
>> >> >> void f1(void){printf("a>0 && a<=10\n");}
>> >> >> void f2(void){printf("a>10 && a<=100\n");}
>> >> >> void f3(void){printf("a>100 && a<=1000\n");}
>> >> >> void f4(void){printf("a>1000 && a<=10000\n");}
>> >> >> void f5(void){printf("a>10000 && a<=100000\n");}
>> >> >> void f6(void){printf("a>100000 && a<=1000000\n");}
>> >> >> 
>> >> >> int main(int argc, char *argv[])
>> >> >> {
>> >> >>     int a=0;
>> >> >>     int i=0;
>> >> >>     void (*fp[1000001])(void)={0};
>> >> >>     fp[0]=f0;
>> >> >>     for(i=1;i<=10;i++) fp[i]=f1;
>> >> >>     for(i=11;i<=100;i++) fp[i]=f2;
>> >> >>     for(i=101;i<=1000;i++) fp[i]=f3;
>> >> >>     for(i=1001;i<=10000;i++) fp[i]=f4;
>> >> >>     for(i=10001;i<=100000;i++) fp[i]=f5;
>> >> >>     for(i=100001;i<=1000000;i++) fp[i]=f6;
>> >> >>     a=atoi(argv[1]);
>> >> >>     (a<0?flz:a>1000000?fgm:fp[a])();
>> >> >>     return 0;
>> >> >> }
>> >> >> anon@lowtide:~/code/ifs$
>> >> > 
>> >> > affirmative
>> >> > 
>> >> 
>> >> But who would write it that way, and why?  Sure, there's no if statements,
>> >> but that comes at the expense of 1,000,001 function pointers.  And the
>> >> nested ternaries constitute conditional tests anyway.  Not to mention
>> >> less readability.  It would run faster, use less stack, and be much more
>> >> readable and faster to design and write without error, by just using a
>> >> list of ifs.
>> >> 
>> >> anon@lowtide:~/code/ifs$ time ./blah 500
>> >> a>100 && a<=1000
>> >> 
>> >> real    0m0.002s
>> >> user    0m0.000s
>> >> sys     0m0.000s
>> >> anon@lowtide:~/code/ifs$ time ./goo 500
>> >> a>100 && a<=1000
>> >> 
>> >> real    0m0.020s
>> >> user    0m0.008s
>> >> sys     0m0.008s
>> >> anon@lowtide:~/code/ifs$
>> > 
>> > What are those times representing, your if/else vs the above (or his code)?
>> > 
>> 
>> if/else vs the above.
>> But you can combine the above with DFS's loop and it's just as fast.
> 
> Because what Feeb said about the complier is correct?
> 

I don't remember what fabtard said, but there is no performance advantage
to putting the ifs in a loop.  There may coding time advantage if the
the number of conditions is extreme, but a sequence of ifs would still
make what is happening more obvious, and for a relatively small number of
conditions the amount of time spent coding the loop might be greater --
just from care taken to get the array values right, off-by-one issues,
etc -- than a simple sequence of ifs, especially with an editor like
vim which makes code block skeletons so easy to duplicate.  Also, not
all if sequences are going to lend themselves to looping in a way that
would reduce the number of written conditions.

The code for the earlier doo.c, which was designed to remove all if
statements, would not even need the ternary conditional except for the
a<0 and a>1000000 tests.  The rest of it just uses the number passed in
as an index into the function pointer array.  But that array is huge,
and there is a big performance hit, so minimizing the number of ifs is
not necessarily a good thing.

Back to comp.os.linux.advocacy | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 08:28 -0400
  Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 09:20 -0700
    Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-28 11:27 -0700
      Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 11:39 -0700
      Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:46 -0400
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 14:52 -0400
      Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 12:20 -0700
  Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 17:21 +0000
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 14:46 -0400
      Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 19:14 +0000
        Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 12:30 -0700
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 20:09 +0000
            Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 13:58 -0700
              Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 21:16 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 14:31 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 21:43 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 15:06 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 22:26 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 15:35 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 23:14 +0000
                Re: The substantiation that -highhorse asked for Snit <usenet@gallopinginsanity.com> - 2018-08-28 14:57 -0700
            Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 23:11 -0400
              Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 06:14 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:34 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 14:31 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-29 11:01 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 12:33 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 09:16 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 16:53 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 10:22 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 17:53 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 11:36 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 13:45 +0000
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 13:59 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 08:15 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 16:00 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 11:20 -0700
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-31 15:00 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 19:40 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 10:15 -0400
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 08:22 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 16:28 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 16:39 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 22:00 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 18:27 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 22:40 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 19:09 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 23:59 +0000
        Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 23:01 -0400
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 06:26 +0000
  Re: The substantiation that -highhorse asked for "F. Russell" <fr@random.info> - 2018-08-28 19:25 +0000
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:32 -0400
      Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-29 06:46 -0700
        Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:55 -0400
          Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-29 08:02 -0700
            Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 10:14 -0400
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 15:12 +0000

csiph-web