Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #138954
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: A final word on casting. |
| Date | 2018-12-23 13:08 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <87k1k0ie66.fsf@bsb.me.uk> (permalink) |
| References | <af569436-b2e1-492b-8379-9f927013c590@googlegroups.com> <1YKTD.30400$CD3.15082@fx05.am4> |
Bart <bc@freeuk.com> writes:
> On 23/12/2018 11:02, chanrasjid@gmail.com wrote:
>> I have been playing with C for about 30 years, but I could never get to really understand casting. I made various weak attempts and gave up; I knew I don't need to be professional in C.
>>
>> I take my layman approach to casting: it is to represent the value of a certain type in a different data type.
>>
>> Some things I tested work and I don't care about its correctness. I always get it correct: (int) 1.23 always give 1.
>
> Try:
>
> printf("%d\n", (int)1.9999999999999999999999999999999);
>
> I seem to get the answer 2.
Are you really puzzled by that?
A C compiler has a little leeway in what value to give to that decimal
constant has, but most implementations will pick the closest value of
type double, which is 2.
> It seems to be the same as (unsigned long long)(signed long long
> int)(a) when a is signed int. So, sign-extend a to the new width, then
> interpret the bits as unsigned.
The C standard gives the rule, and it is not based on sign-extending and
interpreting bits. But for all the machines you care about, the result
will be as you say.
for what it's worth, the rule is:
"... the value is converted by repeatedly adding or subtracting one
more than the maximum value that can be represented in the new type
until the value is in the range of the new type."
i.e. it's x mod 2**n where n is the number of value bits in the unsigned
type.
>> The only use I think is safe is casting compatible types to another
>> with the larger storage, as int to _int64, or float to
>> double. Casting double to float is OK as we expect a loss of
>> precision.
>
> Double has a wider magnitude range than float, so it can fail that way
> (the float value ends up as infinity when the magnitude is too big).
double usually has a wider range that float but it's no guaranteed. And
the floating point type does not necessarily have an infinity. But on
all the machines you care about, what you say is probably true.
--
Ben.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
A final word on casting. chanrasjid@gmail.com - 2018-12-23 03:02 -0800
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 12:11 +0000
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-23 13:08 +0000
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 14:43 +0000
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-23 14:56 +0000
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-23 07:08 -0800
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 15:55 +0000
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 16:07 +0000
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-23 08:21 -0800
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-23 17:56 +0000
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 19:23 +0000
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-23 20:12 +0000
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-23 14:06 -0800
Re: A final word on casting. Tim Rentsch <txr@alumni.caltech.edu> - 2018-12-28 09:34 -0800
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-28 20:29 +0000
Re: A final word on casting. Tim Rentsch <txr@alumni.caltech.edu> - 2018-12-28 15:07 -0800
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2018-12-28 20:56 -0500
Re: A final word on casting. Tim Rentsch <txr@alumni.caltech.edu> - 2018-12-29 09:22 -0800
Re: A final word on casting. Tim Rentsch <txr@alumni.caltech.edu> - 2019-01-01 13:27 -0800
Re: A final word on casting. Bart <bc@freeuk.com> - 2019-01-02 01:07 +0000
Re: A final word on casting. Bart <bc@freeuk.com> - 2019-01-03 18:55 +0000
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2019-01-03 22:27 -0500
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-01-04 16:25 -0500
Re: A final word on casting. Ike Naar <ike@iceland.freeshell.org> - 2018-12-28 19:10 +0000
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-28 12:33 -0800
Re: A final word on casting. "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-23 14:11 -0800
Re: A final word on casting. Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-12-24 02:54 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-24 03:24 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-24 03:29 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-24 03:45 -0800
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-24 13:44 +0000
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2018-12-24 08:51 -0500
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2018-12-23 14:53 -0500
Re: A final word on casting. Robert Wessel <robertwessel2@yahoo.com> - 2018-12-24 09:39 -0600
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2018-12-24 13:38 -0500
Re: A final word on casting. Manfred <noname@add.invalid> - 2018-12-23 21:22 +0100
Re: A final word on casting. Manfred <noname@add.invalid> - 2018-12-23 21:33 +0100
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-23 10:56 -0500
Re: A final word on casting. Sjouke Burry <burrynulnulfour@ppllaanneett.nnll> - 2018-12-23 17:18 +0100
Re: A final word on casting. Bart <bc@freeuk.com> - 2018-12-23 20:03 +0000
Re: A final word on casting. "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2018-12-28 14:47 -0500
Re: A final word on casting. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-23 12:24 +0000
Re: A final word on casting. Richard Damon <Richard@Damon-Family.org> - 2018-12-23 07:28 -0500
Re: A final word on casting. Tim Rentsch <txr@alumni.caltech.edu> - 2018-12-28 07:50 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-23 04:35 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-23 04:42 -0800
Re: A final word on casting. fir <profesor.fir@gmail.com> - 2018-12-23 04:52 -0800
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-23 10:28 -0500
Re: A final word on casting. Barry Schwarz <schwarzb@dqel.com> - 2018-12-23 11:39 -0800
Re: A final word on casting. Ike Naar <ike@iceland.freeshell.org> - 2018-12-24 07:56 +0000
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-24 14:03 -0800
Re: A final word on casting. Barry Schwarz <schwarzb@dqel.com> - 2018-12-24 14:39 -0800
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-24 14:50 -0800
Re: A final word on casting. Keith Thompson <kst-u@mib.org> - 2018-12-24 15:34 -0800
Re: A final word on casting. Keith Thompson <kst-u@mib.org> - 2018-12-24 15:23 -0800
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-24 20:34 -0800
Re: A final word on casting. Keith Thompson <kst-u@mib.org> - 2018-12-24 14:52 -0800
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-24 20:25 -0800
Re: A final word on casting. James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-24 17:52 -0500
Re: A final word on casting. luser droog <luser.droog@gmail.com> - 2018-12-24 21:27 -0800
Re: A final word on casting. luser droog <luser.droog@gmail.com> - 2018-12-24 21:39 -0800
Re: A final word on casting. chanrasjid@gmail.com - 2018-12-24 22:36 -0800
csiph-web