Mailing List Archive

Floating Point Issue
I have small code....

#include <stdio.h>
#include <string.h>

int main()
{
float f= 1256.35;
char ch[4];

printf("\n1. f : %f",f);
memset(ch,'\0',strlen(ch) );
printf("\n2. f : %f",f);
return 0;
}

Expected output is
1. f : 1256.35
2. f : 1256.35

But I am getting the output
(on windows)
1. f : 1256.35
2. f : 0.000000

(on Linux)
1. f : 1256.35
segmentation fault

why?


Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Sep 27 2007 12:41, mahamuni ashish wrote:
>I have small code....

This is not a kernel problem. (Read your C book and/or ask in
a C newsgroup.)

>char ch[4];
>memset(ch,'\0',strlen(ch) );
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Thu, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );

Can't work. ch[]'s content is undefined, so strlen(ch) may read anywhere
in memory, and/or memset() write anywhere.

Xav


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Thu, Sep 27, 2007 at 12:41:41PM +0100, mahamuni ashish wrote:
> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );

strlen() applied to uninitialized array => undefined behaviour.

What does that have to do with the kernel, anyway?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Thu, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );
> printf("\n2. f : %f",f);
> return 0;
> }
>
> Expected output is
> 1. f : 1256.35
> 2. f : 1256.35
>
> But I am getting the output
> (on windows)
> 1. f : 1256.35
> 2. f : 0.000000
>
> (on Linux)
> 1. f : 1256.35
> segmentation fault
>
> why?

'cos 'strlen(ch)' isn't defined until you've initialised ch. If you swap
that line out with 'memset(ch, '\0', sizeof(ch))' then it will work.

Not a kernel bug, and hence not appropriate material for this list.

Trond

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
If Windows lets you get away with this, then Windows is broken.
memset(ch,'\0',strlen(ch) );

'ch' is uninitialized local data. Nobody knows what evil lurks...


Thay said, the kernel will make sure that any data that gets
put into your address-space doesn't contain anybody else's
information --that's all. The junk on your stack was created
by your task.


On Thu, 27 Sep 2007, mahamuni ashish wrote:

> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );
> printf("\n2. f : %f",f);
> return 0;
> }
>
> Expected output is
> 1. f : 1256.35
> 2. f : 1256.35
>
> But I am getting the output
> (on windows)
> 1. f : 1256.35
> 2. f : 0.000000
>
> (on Linux)
> 1. f : 1256.35
> segmentation fault
>
> why?
>
>
> Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

Cheers,
Dick Johnson
Penguin : Linux version 2.6.22.1 on an i686 machine (5588.29 BogoMips).
My book : http://www.AbominableFirebug.com/
_


****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Sep 27 2007 16:53, linux-os (Dick Johnson) wrote:
>
>If Windows lets you get away with this, then Windows is broken.
>memset(ch,'\0',strlen(ch) );

No, probably just the chance that the memory to which ch points
had a nul in it or in the near bytes.

Use valgrind, move along.

>On Thu, 27 Sep 2007, mahamuni ashish wrote:
>
>> I have small code....
>>
>> #include <stdio.h>
>> #include <string.h>
>>
>> int main()
>> {
>> float f= 1256.35;
>> char ch[4];
>>
>> printf("\n1. f : %f",f);
>> memset(ch,'\0',strlen(ch) );
>> printf("\n2. f : %f",f);
>> return 0;
>> }
>>
>> Expected output is
>> 1. f : 1256.35
>> 2. f : 1256.35
>>
>> But I am getting the output
>> (on windows)
>> 1. f : 1256.35
>> 2. f : 0.000000
>>
>> (on Linux)
>> 1. f : 1256.35
>> segmentation fault
>>
>> why?
>>
>>
>> Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php
>>
>> -
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>>
>
>Cheers,
>Dick Johnson
>Penguin : Linux version 2.6.22.1 on an i686 machine (5588.29 BogoMips).
>My book : http://www.AbominableFirebug.com/
>_
>
>
>****************************************************************
>The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.
>
>Thank you.
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Thu, Sep 27, 2007 at 05:17:44PM +0200, Jan Engelhardt wrote:
>
>On Sep 27 2007 12:41, mahamuni ashish wrote:
>>I have small code....
>
>This is not a kernel problem. (Read your C book and/or ask in
>a C newsgroup.)

Please goto comp.lang.c for help. ;)

--
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: Floating Point Issue [ In reply to ]
On Don, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> I have small code....

And the relevance to the Linux kernel as such is?
[....]

Add "-Wall -Wextra" and fix all errors and warnings.

> Expected output is

No.

Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/