Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Using type prefixes with floating point constants

0 views
Skip to first unread message

Ioannis Vranos

unread,
Mar 26, 2009, 9:54:37 AM3/26/09
to
ISO/IEC 9899:1990/1995 says (from K&R2):

“A6.4

When a less precise floating value is converted to an equally or more
precise floating type, the value is unchanged. When a more precise
floating value is converted to a less precise floating type, and the
value is within representable range, the result may be either the next
higher or the next lower representable value. If the result is out of
range, the behavior is undefined”.


Question: Does the above mean that it is a good practice or *always*
needed to use the appropriate type suffixes with floating point constants?


An example of this:


#include <iostream>


int main(void)
{
using namespace std;

float f1 = 0.33439F;

float f2= 0.33439f;

cout<< "\nf1= "<< f1<<", f2= "<< f2<< endl;


double d1= 0.33439;

double d2= 0.33439;

cout<< "\nd1= "<< d1<<", d2= "<< d2<< endl;


// It doesn't work with MINGW, compiler is broken regarding
// long double.
long double ld1= 0.33439L;

long double ld2= 0.33439l; // 'l' is the lower case 'L'.

cout<< "\nld1= "<< ld1<<", ld2= "<< ld2<< endl;


return 0;
}

Ioannis Vranos

unread,
Mar 26, 2009, 9:57:10 AM3/26/09
to
ISO/IEC 9899:1990/1995 says (from K&R2):

“A6.4

When a less precise floating value is converted to an equally or more
precise floating type, the value is unchanged.

==> When a more precise floating value is converted to a less precise

Bart van Ingen Schenau

unread,
Mar 27, 2009, 3:49:44 AM3/27/09
to
On Mar 26, 2:54 pm, Ioannis Vranos <ivra...@freemail.spam.not.gr>
wrote:

> ISO/IEC 9899:1990/1995 says (from K&R2):
>
> “A6.4
>
> When a less precise floating value is converted to an equally or more
> precise floating type, the value is unchanged. When a more precise
> floating value is converted to a less precise floating type, and the
> value is within representable range, the result may be either the next
> higher or the next lower representable value. If the result is out of
> range, the behavior is undefined”.
>
> Question: Does the above mean that it is a good practice or *always*
> needed to use the appropriate type suffixes with floating point constants?
>
I don't know about best practice---I don't use floating point often
enough for that---, but it certainly is not needed to always specify
the suffixes.

First of all, the majority of floating point constants are not exactly
representable in any of the floating point types, so you get the
conversion to the next higher or next lower representable value
anyway.
If float and double don't have the same range and precision, then a
compiler must be really perverse to get different results for the
expressions '(float)0.33439' and '0.33439F'.

The only suffix with more than documentary value is L (or l), if you
need the extra precision or range that long double might give you.

Bart v Ingen Schenau

Ioannis Vranos

unread,
Mar 27, 2009, 8:53:58 AM3/27/09
to


Thank you for your answer, the discussion is continued in thread:

"Corrected: Using type suffixes with floating point constants"

where I will forward your answer.

0 new messages