Re: NSNumber stringValue
Re: NSNumber stringValue
- Subject: Re: NSNumber stringValue
- From: Andy Lee <email@hidden>
- Date: Sat, 12 Dec 2009 13:28:59 -0500
P.P.S. Never mind, passing f = 0.12345678901234567 is a counterexample. So the answer is no, you won't get a bitwise equivalent if you do a stringValue-floatValue round trip.
--Andy
On Dec 12, 2009, at 1:25 PM, Andy Lee wrote:
> On Dec 12, 2009, at 1:07 PM, Andy Lee wrote:
>> If I understand the question, it's not about converting an arbitrary decimal string to a float, but specifically a string that was generated from a float in the first place.
>>
>> As glenn pointed out, that string most certainly *can* be a string that can be converted back to a bitwise equivalent of the original float. Ben's question was whether in practice it is guaranteed to be so, or whether stringValue uses a maximum number of decimal places that would lead to rounding error. I can't tell from a quick look at the docs.
>
> P.S. If the answer is no, it seems to me there should be an easy counterexample, but my math isn't good enough to figure one out. I've tried the following code with f = 0.1, 0.100001, and 0.12345, but I always get back a bitwise match for the original float, even when stringValue returns a rounded string.
>
> - (void)testFloat:(float)f
> {
> NSString * s = [[NSNumber numberWithFloat:f] stringValue];
> float f2 = [s floatValue];
> NSLog(@"%.20f, %@, %.20f", f, s, f2);
> char *cp1 = (char *)(&f);
> char *cp2 = (char *)(&f2);
> int i;
> for (i = 0; i < sizeof(float); i++)
> {
> NSLog(@"byte %d %@", i, (cp1[i] == cp2[i] ? @"MATCHES" : @"DOES NOT match"));
> }
> }
>
> --Andy
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden