"long double" and "printf"
Question posted by: Zero
(Guest)
on
June 6th, 2006 01:25 PM
Hi everybody,
i want to write a small program, which shows me the biggest and
smallest number in dependance of the data type.
For int the command could be:
printf("\n%20s\t%7u\t%13i\t%13i","signed int",sizeof(signed
int),INT_MIN,INT_MAX);
But what do I have to do when I want to print out the numbers of data
type "long double".
I tried
printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
double),LDBL_MIN,LDBL_MAX);
but this results in
long double 12 0.000000 -1.#QNAN0
Does anybody has a solution.
I tried this with Bloodshed using the gnu-compiler.
Thanks for your help!
|
|
June 6th, 2006 01:45 PM
# 2
|
Re: "long double" and "printf"
Zero wrote:[color=blue]
>
> Hi everybody,
>
> i want to write a small program, which shows me the biggest and
> smallest number in dependance of the data type.
>
> For int the command could be:
>
> printf("\n%20s\t%7u\t%13i\t%13i","signed int",sizeof(signed
> int),INT_MIN,INT_MAX);
>
> But what do I have to do when I want to print out the numbers of data
> type "long double".
>
> I tried
> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> double),LDBL_MIN,LDBL_MAX);
> but this results in
>
> long double 12 0.000000 -1.#QNAN0
>
> Does anybody has a solution.
>
> I tried this with Bloodshed using the gnu-compiler.[/color]
For something like that,
you should try to post a complete program.
/* BEGIN new.c */
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%s\n%u\n%Le\n%Le\n",
"long double",
(unsigned)sizeof(long double),
LDBL_MIN,
LDBL_MAX);
return 0;
}
/* END new.c */
--
pete
|
|
June 6th, 2006 02:05 PM
# 3
|
Re: "long double" and "printf"
pete wrote:[color=blue]
> Zero wrote:[color=green]
> >
> > Hi everybody,
> >
> > i want to write a small program, which shows me the biggest and
> > smallest number in dependance of the data type.
> >
> > For int the command could be:
> >
> > printf("\n%20s\t%7u\t%13i\t%13i","signed int",sizeof(signed
> > int),INT_MIN,INT_MAX);
> >
> > But what do I have to do when I want to print out the numbers of data
> > type "long double".
> >
> > I tried
> > printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> > double),LDBL_MIN,LDBL_MAX);
> > but this results in
> >
> > long double 12 0.000000 -1.#QNAN0
> >
> > Does anybody has a solution.
> >
> > I tried this with Bloodshed using the gnu-compiler.[/color]
>
> For something like that,
> you should try to post a complete program.
>
> /* BEGIN new.c */
>
> #include <stdio.h>
> #include <float.h>
>
> int main(void)
> {
> printf("%s\n%u\n%Le\n%Le\n",
> "long double",
> (unsigned)sizeof(long double),
> LDBL_MIN,
> LDBL_MAX);
> return 0;
> }
>
> /* END new.c */
>
>
> --
> pete[/color]
Thanks for your help. But i still get this message:
long double
12
0.000000e+000
-1.#QNAN0e+000
??
|
|
June 6th, 2006 02:05 PM
# 4
|
Re: "long double" and "printf"
"Zero" <chefmuetze@web.de> wrote:
[color=blue]
> But what do I have to do when I want to print out the numbers of data
> type "long double".
>
> I tried
> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> double),LDBL_MIN,LDBL_MAX);
> but this results in
>
> long double 12 0.000000 -1.#QNAN0
>
> Does anybody has a solution.
>
> I tried this with Bloodshed using the gnu-compiler.[/color]
AFAICT this is a bug in Dev-C++. Their library and their headers don't
match on this detail. One (IIRC the header) thinks long doubles are
larger than doubles, the other (IIRC the printf() code) thinks they're
as large as doubles.
Richard
|
|
June 6th, 2006 02:25 PM
# 5
|
Re: "long double" and "printf"
In article <1149602363.679848.32320@h76g2000cwa.googlegroups.c om> "Zero" <chefmuetze@web.de> writes:
....[color=blue]
> Thanks for your help. But i still get this message:
>
> long double
> 12
> 0.000000e+000
> -1.#QNAN0e+000[/color]
Some older compilers did use 'll' in stead of 'L' for long double.
--
dik t. winter, cwi, kruislaan 413, 1098 sj amsterdam, nederland, +31205924131
home: bovenover 215, 1025 jn amsterdam, nederland; http://www.cwi.nl/~dik/
|
|
June 6th, 2006 02:25 PM
# 6
|
Re: "long double" and "printf"
Zero wrote:[color=blue]
> Hi everybody,
>
> i want to write a small program, which shows me the biggest and
> smallest number in dependance of the data type.
>
> For int the command could be:
>
> printf("\n%20s\t%7u\t%13i\t%13i","signed int",sizeof(signed
> int),INT_MIN,INT_MAX);
>
> But what do I have to do when I want to print out the numbers of data
> type "long double".
>
> I tried
> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> double),LDBL_MIN,LDBL_MAX);
> but this results in
>
> long double 12 0.000000 -1.#QNAN0
>
> Does anybody has a solution.
>
> I tried this with Bloodshed using the gnu-compiler.
>
> Thanks for your help![/color]
I just tried the code with Visual C++ and there it seems
that there is no difference between double and long double?
Bloodshed says long double consists of 12 Bytes, Visual C++ says 12.
What is right now?
|
|
June 6th, 2006 02:25 PM
# 7
|
Re: "long double" and "printf"
Zero wrote:[color=blue]
> Hi everybody,
>
> i want to write a small program, which shows me the biggest and
> smallest number in dependance of the data type.
>
> For int the command could be:
>
> printf("\n%20s\t%7u\t%13i\t%13i","signed int",sizeof(signed
> int),INT_MIN,INT_MAX);
>
> But what do I have to do when I want to print out the numbers of data
> type "long double".
>
> I tried
> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> double),LDBL_MIN,LDBL_MAX);
> but this results in
>
> long double 12 0.000000 -1.#QNAN0
>
> Does anybody has a solution.
>
> I tried this with Bloodshed using the gnu-compiler.
>
> Thanks for your help![/color]
I just tried the code with Visual C++ and there it seems
that there is no difference between double and long double?
Bloodshed says long double consists of 12 Bytes, Visual C++ says 8.
What is right now?
|
|
June 6th, 2006 02:25 PM
# 8
|
Re: "long double" and "printf"
Richard Bos wrote:[color=blue]
> "Zero" <chefmuetze@web.de> wrote:
>[color=green]
> > But what do I have to do when I want to print out the numbers of data
> > type "long double".
> >
> > I tried
> > printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> > double),LDBL_MIN,LDBL_MAX);
> > but this results in
> >
> > long double 12 0.000000 -1.#QNAN0
> >
> > Does anybody has a solution.
> >
> > I tried this with Bloodshed using the gnu-compiler.[/color]
>
> AFAICT this is a bug in Dev-C++. Their library and their headers don't
> match on this detail. One (IIRC the header) thinks long doubles are
> larger than doubles, the other (IIRC the printf() code) thinks they're
> as large as doubles.
>
> Richard[/color]
How do you know that this is a bug? Is there a side, where this
information can be fetched?
|
|
June 6th, 2006 04:15 PM
# 9
|
Re: "long double" and "printf"
Zero wrote:
<snip>
[color=blue][color=green]
>> I tried
>> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
>> double),LDBL_MIN,LDBL_MAX);
>> but this results in
>>
>> long double 12 0.000000 -1.#QNAN0
>>
>> Does anybody has a solution.
>>
>> I tried this with Bloodshed using the gnu-compiler.
>>
>> Thanks for your help![/color]
>
> I just tried the code with Visual C++ and there it seems
> that there is no difference between double and long double?
>
> Bloodshed says long double consists of 12 Bytes, Visual C++ says 8.
> What is right now?[/color]
Both. The C standard does not mandate exact sizes only minimums.
--
Flash Gordon, living in interesting times.
Web site - http://home.flash-gordon.me.uk/
comp.lang.c posting guidelines and intro:
http://clc-wiki.net/wiki/Intro_to_clc
|
|
June 6th, 2006 04:25 PM
# 10
|
Re: "long double" and "printf"
Flash Gordon wrote:[color=blue]
> Zero wrote:
>
> <snip>
>[color=green][color=darkred]
>>> I tried
>>> printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
>>> double),LDBL_MIN,LDBL_MAX);
>>> but this results in
>>>
>>> long double 12 0.000000 -1.#QNAN0
>>>
>>> Does anybody has a solution.
>>>
>>> I tried this with Bloodshed using the gnu-compiler.
>>>
>>> Thanks for your help![/color]
>>
>> I just tried the code with Visual C++ and there it seems
>> that there is no difference between double and long double?
>>
>> Bloodshed says long double consists of 12 Bytes, Visual C++ says 8.
>> What is right now?[/color]
>
> Both. The C standard does not mandate exact sizes only minimums.[/color]
Besides, the amount of unused storage doesn't directly answer your
problem. Few of us would know whether specifying Bloodshed implies a
specific version of gcc and run-time library. Run-time libraries
associated with Windows versions of gcc which I have used didn't
implement 10-byte long double in printf(), even though it might be
supported in terms of basic operators. If it uses Visual C++ printf(),
evidently there will be no support for more than 8-byte data type.
|
|
June 6th, 2006 05:45 PM
# 11
|
Re: "long double" and "printf"
"Dik T. Winter" <Dik.Winter@cwi.nl> wrote in message
news:J0FzDt.9zw@cwi.nl...[color=blue]
> In article <1149602363.679848.32320@h76g2000cwa.googlegroups.c om> "Zero"
> <chefmuetze@web.de> writes:
> ...[color=green]
> > Thanks for your help. But i still get this message:
> >
> > long double
> > 12
> > 0.000000e+000
> > -1.#QNAN0e+000[/color]
>
> Some older compilers did use 'll' in stead of 'L' for long double.[/color]
I guess that he is using the GCC MINGW compiler which creates 80 bit
hardware long doubles, but which the Microsoft runtime libraries do not
match (for MS VC++ double and long double are the same type).
[color=blue]
> --
> dik t. winter, cwi, kruislaan 413, 1098 sj amsterdam, nederland,
> +31205924131
> home: bovenover 215, 1025 jn amsterdam, nederland;
> http://www.cwi.nl/~dik/[/color]
|
|
June 6th, 2006 08:25 PM
# 12
|
Re: "long double" and "printf"
pete a écrit :[color=blue]
>
> For something like that,
> you should try to post a complete program.
>
> /* BEGIN new.c */
>
> #include <stdio.h>
> #include <float.h>
>
> int main(void)
> {
> printf("%s\n%u\n%Le\n%Le\n",
> "long double",
> (unsigned)sizeof(long double),
> LDBL_MIN,
> LDBL_MAX);
> return 0;
> }
>
> /* END new.c */
>
>[/color]
This produces:
long double
12
3.362103e-4932
1.189731e+4932
with lcc-win32
|
|
June 8th, 2006 01:35 PM
# 13
|
Re: "long double" and "printf"
"Zero" <chefmuetze@web.de> wrote:
[color=blue]
> Richard Bos wrote:[color=green]
> > "Zero" <chefmuetze@web.de> wrote:[/color][/color]
[color=blue][color=green][color=darkred]
> > > I tried
> > > printf("\n%20s\t%7u\t%13Lf\t%13Lf","long double",sizeof(long
> > > double),LDBL_MIN,LDBL_MAX);
> > > but this results in
> > >
> > > long double 12 0.000000 -1.#QNAN0[/color][/color][/color]
[color=blue][color=green]
> > AFAICT this is a bug in Dev-C++. Their library and their headers don't
> > match on this detail. One (IIRC the header) thinks long doubles are
> > larger than doubles, the other (IIRC the printf() code) thinks they're
> > as large as doubles.[/color]
>
> How do you know that this is a bug?[/color]
For starters, because the behaviour you observe is not correct. There
was a c.l.c thread on this very problem some time ago; if you search for
it I'm sure you can find it. In that thread, some people (including me)
did some experiments and concluded that it had to be a mismatch
somewhere in Dev-C++.
Richard
Not the answer you were looking for? Post your question . . .
189,325 Experts ready to help you find a solution.
Sign up for a free account, or Login (if you're already a member).
|