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


Groups > comp.lang.c++ > #84175

Re: Constexpr evaluation of heavy stuff

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c++
Subject Re: Constexpr evaluation of heavy stuff
Date 2022-05-19 11:59 +0200
Organization A noiseless patient Spider
Message-ID <t654dl$cek$1@dont-email.me> (permalink)
References <t63uqq$hnm$1@dont-email.me> <t64r23$ncc$1@dont-email.me>

Show all headers | View raw


On 19/05/2022 09:19, Alf P. Steinbach wrote:
> On 19 May 2022 01:17, Andrey Tarasevich wrote:
>>    #include <array>
>>
>>    template <std::size_t N> constexpr auto collect_primes()
>>    {
>>      std::array<unsigned, N> primes = { 2, 3 };
>>      std::size_t n_primes = 2;
>>
>>      for (unsigned i = 0; n_primes < N; ++i)
>>      {
>>        unsigned value = 6u * (i / 2u + 1u) + i % 2u * 2u - 1;
>>
>>        std::size_t i_prime = 0;
>>        for (; i_prime < n_primes; ++i_prime)
>>          if (value % primes[i_prime] == 0)
>>            break;
>>
>>        if (i_prime == n_primes)
>>          primes[n_primes++] = value;
>>      }
>>
>>      return primes;
>>    }
>> [snip]
> 
> Not what you're asking (which I think is important! but alas have no 
> answer), but consider disregarding silly context independent herd 
> opinion about what language and library features should and should not 
> be used, and just use the features appropriate for the task at hand:
> 
> 
> #include <array>
> template< int n, class Item > using Array_ = std::array<Item, n>;
> 
> template< int capacity, class Item >
> struct Simple_static_vector_{ int count; Array_<capacity, Item> items; };
> 
> template< int n_primes >
> constexpr auto collect_primes() -> Array_<n_primes, int>
> {
>      Simple_static_vector_<n_primes, int> primes = {2, {2, 3}};
>      for( int candidate = 5; primes.count < n_primes; candidate += 2 ) {
>          for( int i = 0; i < primes.count; ++i ) {
>              if( candidate % primes.items[i] == 0 ) {
>                  goto continue_candidate;
>              }
>          }
>          primes.items[primes.count++] = candidate;
>          continue_candidate: ;
>      }
>      return primes.items;
> }
> 
> 
> Code features different from original:
> 
> * Self-describing, including the alias with more reasonable parameter 
> order (like "5 int", not "int 5") for std library thing.

That is, at best, a very subjective viewpoint.  Your code is different, 
and I am sure that to /your/ eyes it is more "self-describing" - but I 
doubt if it is significantly clearer for anyone else.  (Stepping through 
the prime candidates by 2, rather than Andrey's more complicated jumps, 
is clearer.  But that's a minor point.)

> * Signed types like `int` for numbers, not unsigned types like `size_t`.
> * `goto` where appropriate (would be nice with a labeled `continue`!).
> 

This is not a case where "goto" helps the code structure.  (It would be 
interesting to know if it affected the compile time at all.)

I agree on the convenience of "int" over "std::size_t" for a loop 
variable, but I'd say the choice is personal preference or habit rather 
than some kind of "religious herd mentality".  C++ is a very flexible 
language and the same code can be written in many ways - I think you 
should place the bar a lot higher before criticising other peoples code 
as "silly" or "herd opinion".

On the other hand, signed int is probably less efficient than unsigned 
int here, since there are divisions involved - but that may vary by 
target and compiler, and I have no idea if it is significant for 
compile-time calculations.

> Well, OK, the C++ core guidelines also recommends signed integer types 
> for numbers, so that's not so very non-herd-ish in general. It's just an 
> affront to some herds that have adopted religious articles about size 
> types etc. But since the religious herds are very vocal I included that.
> 
> 
> - Alf
> 

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Constexpr evaluation of heavy stuff Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-05-18 16:17 -0700
  Re: Constexpr evaluation of heavy stuff "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-05-19 09:19 +0200
    Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-19 11:59 +0200
      Re: Constexpr evaluation of heavy stuff "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-05-19 12:37 +0200
        Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-19 14:49 +0200
          Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-19 06:19 -0700
            Re: Constexpr evaluation of heavy stuff Paavo Helde <eesnimi@osa.pri.ee> - 2022-05-19 20:32 +0300
              Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-20 01:12 -0700
                Re: Constexpr evaluation of heavy stuff Juha Nieminen <nospam@thanks.invalid> - 2022-05-20 08:37 +0000
                Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-20 02:21 -0700
                Re: Constexpr evaluation of heavy stuff Ben <ben.usenet@bsb.me.uk> - 2022-05-20 11:25 +0100
                Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-20 12:47 +0200
                Re: Constexpr evaluation of heavy stuff Ben <ben.usenet@bsb.me.uk> - 2022-05-20 12:13 +0100
                Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-20 14:27 +0200
                Re: Constexpr evaluation of heavy stuff Öö Tiib <ootiib@hot.ee> - 2022-05-20 06:33 -0700
                Re: Constexpr evaluation of heavy stuff Paavo Helde <eesnimi@osa.pri.ee> - 2022-05-20 17:15 +0300
                Re: Constexpr evaluation of heavy stuff Christian Gollwitzer <auriocus@gmx.de> - 2022-05-20 18:57 +0200
                Re: Constexpr evaluation of heavy stuff Paavo Helde <eesnimi@osa.pri.ee> - 2022-05-20 22:31 +0300
                Re: Constexpr evaluation of heavy stuff Manfred <noname@add.invalid> - 2022-05-21 21:56 +0200
                Re: Constexpr evaluation of heavy stuff Öö Tiib <ootiib@hot.ee> - 2022-05-21 23:24 -0700
                Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-22 04:56 -0700
                Re: Constexpr evaluation of heavy stuff Öö Tiib <ootiib@hot.ee> - 2022-05-22 06:15 -0700
                Re: Constexpr evaluation of heavy stuff Manfred <noname@add.invalid> - 2022-05-22 21:46 +0200
                Re: Constexpr evaluation of heavy stuff "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-05-22 23:23 +0200
                Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-22 16:26 -0700
                Re: Constexpr evaluation of heavy stuff Manfred <noname@add.invalid> - 2022-05-23 17:24 +0200
                Re: Constexpr evaluation of heavy stuff Richard Damon <Richard@Damon-Family.org> - 2022-05-23 19:41 -0400
                Re: Constexpr evaluation of heavy stuff scott@slp53.sl.home (Scott Lurndal) - 2022-05-24 16:15 +0000
                Re: Constexpr evaluation of heavy stuff Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-05-24 05:37 -0700
                Re: Constexpr evaluation of heavy stuff Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-05-20 04:19 -0700
                Re: Constexpr evaluation of heavy stuff Ben <ben.usenet@bsb.me.uk> - 2022-05-20 12:32 +0100
                Re: Constexpr evaluation of heavy stuff Juha Nieminen <nospam@thanks.invalid> - 2022-05-20 10:40 +0000
                Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-20 12:31 +0200
                Re: Constexpr evaluation of heavy stuff Juha Nieminen <nospam@thanks.invalid> - 2022-05-20 10:43 +0000
                Re: Constexpr evaluation of heavy stuff David Brown <david.brown@hesbynett.no> - 2022-05-20 14:52 +0200
          Re: Constexpr evaluation of heavy stuff "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-05-19 15:34 +0200
    Re: Constexpr evaluation of heavy stuff "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-05-19 17:03 +0200
  Re: Constexpr evaluation of heavy stuff Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-05-19 08:53 -0700
    Re: Constexpr evaluation of heavy stuff Marcel Mueller <news.5.maazl@spamgourmet.org> - 2022-05-19 18:33 +0200

csiph-web