fix error in float comparison

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32361 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2011-02-25 00:25:43 +00:00
parent 841e43be00
commit b463bba090
2 changed files with 62 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2011-02-24 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSNumber.m:
Fix error in float comparison.
2011-02-24 Niels Grewe <niels.grewe@halbordnung.de>
* Source/NSUserDefaults.m

View file

@ -265,8 +265,35 @@ return NSOrderedSame;
case 'd':
{
double other = [aNumber doubleValue];
double selfv = [self doubleValue];
COMPARE (((double) value), other);
if (isnan(selfv))
{
if (isnan(other))
{
return NSOrderedSame;
}
else
{
return NSOrderedAscending;
}
}
else
{
if (isnan(other))
{
return NSOrderedDescending;
}
else if (selfv < other)
{
return NSOrderedAscending;
}
else if (selfv > other)
{
return NSOrderedDescending;
}
return NSOrderedSame;
}
}
default:
[NSException raise: NSInvalidArgumentException
@ -305,9 +332,37 @@ return NSOrderedSame;
[NSException raise: NSInvalidArgumentException
format: @"nil argument for compare:"];
}
other = [aNumber doubleValue];
value = [self doubleValue];
COMPARE (value, other);
if (isnan(value))
{
if (isnan(other))
{
return NSOrderedSame;
}
else
{
return NSOrderedAscending;
}
}
else
{
if (isnan(other))
{
return NSOrderedDescending;
}
else if (value < other)
{
return NSOrderedAscending;
}
else if (value > other)
{
return NSOrderedDescending;
}
return NSOrderedSame;
}
}
@end