Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #84175
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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