Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <vbnaqt$2g0vc$1@dont-email.me>
Deutsch   English   Français   Italiano  
<vbnaqt$2g0vc$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: Re: Top 10 most common hard skills listed on resumes...
Date: Mon, 9 Sep 2024 19:21:33 +0200
Organization: A noiseless patient Spider
Lines: 71
Message-ID: <vbnaqt$2g0vc$1@dont-email.me>
References: <vab101$3er$1@reader1.panix.com> <vbcs65$eabn$1@dont-email.me>
 <vbekut$1kd24$1@paganini.bofh.team> <vbepcb$q6p2$1@dont-email.me>
 <vbgb5q$1ruv8$1@paganini.bofh.team> <vbhbbb$1blt4$1@dont-email.me>
 <vbipp5$24kl5$1@paganini.bofh.team> <vbk0d9$1tajm$1@dont-email.me>
 <vbkpfc$27l2o$1@paganini.bofh.team> <vbl3am$228vv$1@dont-email.me>
 <vblfgb$2dkij$1@paganini.bofh.team> <vblhp7$249ug$1@dont-email.me>
 <vbloje$2e34o$1@paganini.bofh.team> <vbmeae$2bn2v$2@dont-email.me>
 <vbn8pe$2g9i6$2@paganini.bofh.team>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Mon, 09 Sep 2024 19:21:34 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3efea3e64b610dbd0655d184f54f1324";
	logging-data="2622444"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/dhHmJvmlPRbkBooCIE1pOmmnw+VeHTm4="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:R9N2k/669C5gi9CdjYJmSZvODWo=
Content-Language: en-GB
In-Reply-To: <vbn8pe$2g9i6$2@paganini.bofh.team>

On 09/09/2024 18:46, Waldek Hebisch wrote:
> David Brown <david.brown@hesbynett.no> wrote:
>> On 09/09/2024 05:04, Waldek Hebisch wrote:
>>> Bart <bc@freeuk.com> wrote:
>>>> On 09/09/2024 01:29, Waldek Hebisch wrote:
>>>>> Bart <bc@freeuk.com> wrote:
>>>>
>>>>> No.  It is essential for efficiency to have 32-bit types.  On 32-bit
>>>>> machines doing otherwise would add useless instructions to object
>>>>> code.  More precisly, really stupid compiler will generate useless
>>>>> intructions even with my declarations, really smart one will
>>>>> notice that variables fit in 32-bits and optimize accordingly.
>>>>> But at least some gcc versions needed such declarations.  Note
>>>>> also that my version makes clear that there there is
>>>>> symmetry (everything should be added using 64-bit precision),
>>>>> you depend on promotion rules which creates visual asymetry
>>>>> are requires reasoning to realize that meaning is symetric.
>>>>
>>>> Your posted code used 64-bit aritmetic. The xext and c 32-bit variables
>>>> were used in loops where they need to be widened to 64 bits anyway. The
>>>> new value of c is set from a 32-bit result.
>>>
>>> Well, at C level there is 64-bit type.  The intent is that C compiler
>>> should notice that the result is 32-bit + carry flag.  Ideally
>>> compiler should notice that c has only one bit and can keep it
>>> in carry flag.  On i386 comparison needed for loop control would
>>> destroy carry flag, so there must be code using value of carry in
>>> register and code to save carry to register.  But one addition
>>> of highs parts can be skipped.  On 32-bit ARM compiler can use
>>> special machine istructions and actually generated code which
>>> is close to optimal.
>>
>> When you have a type that you want to be at least 32 bits (to cover the
>> range you need), and want it to be as efficient as possible on 32-bit
>> and 64-bit machines (and 16-bit and 8-bit, still found in
>> microcontrollers), use "int_fast32_t".  On x86-64 it will be 64-bit, on
>> 32-bit systems it will be 32-bit.  Use of the [u]int_fastNN_t types can
>> make code significantly more efficient on 64-bit systems while retaining
>> efficiency on 32-bit (or even smaller) targets.
> 
> Well, I have constraints, some of which are outside of C code.
> To resolve contraints I normally use some configure machinery.
> If a standard type is exact match for my constraints, then I would
> use standard type, possibly adding some fallbacks for pre-standard
> systems.  But if my constranits differ, I see no advantage in
> using more "fancy" standard types compared to old types.
> 

The "fancy" standard types in this case specify /exactly/ what you 
apparently want - a type that can deal with at least 32 bits for range, 
and is as efficient as possible on different targets.  What other 
constraints do you have here that make "int_fast32_t" unsuitable?

> Concerning '<stdint.h>', somewhat worring thing is that several types
> there seem to be optional (or maybe where optional in older versions
> of the standard).  I am not sure if this can be real problem,
> but too many times I saw that on various issues developers say
> "this in not mandatory, so we will skip it".
> 

<stdint.h> has been required since C99.  It has not been optional in any 
C standard in the last 25 years.  That's a /long/ time - long enough for 
most people to be able to say "it's standard".

And almost every C90 compiler also includes <stdint.h> as an extension.

If you manage to find a compiler that is old enough not to have 
<stdint.h>, and you need to use it for actual code, it's probably worth 
spending the 3 minutes it takes to write a suitable <stdint.h> yourself 
for that target.