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


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

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-29 14:31 +0000
Organization O.W.L.
Message-ID <g89z0b083.a44@rooftop.invalid> (permalink)
References (7 earlier) <8825ee40-14b4-4b85-9f95-1af4cdb5e7f6@googlegroups.com> <8g0a008803a.3@rooftop.invalid> <Y8ohD.699$HK2.581@fx08.iad> <a9b00a0b3.e@rooftop.invalid> <JgxhD.7$UI2.1@fx18.iad>

Show all headers | View raw


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$
 

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