Thread overview | |||||
---|---|---|---|---|---|
|
February 16, 2014 Strange result with nextUp for reals | ||||
---|---|---|---|---|
| ||||
----- import std.math; import std.stdio; void main() { writefln("nextUp of %a is %a", 1.0, 1.0.nextUp()); real num = 1.0; writefln("nextUp of %a is %a", num, num.nextUp()); } ----- This prints: nextUp of 0x1p+0 is 0x1.0000000000001p+0 nextUp of 0x1p+0 is 0x1.0000000000000002p+0 Any idea why the results are different? |
February 16, 2014 Re: Strange result with nextUp for reals | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | On 02/16/2014 01:42 PM, Andrej Mitrovic wrote: > ----- > import std.math; > import std.stdio; > > void main() > { > writefln("nextUp of %a is %a", 1.0, 1.0.nextUp()); That line uses doubles. > > real num = 1.0; > writefln("nextUp of %a is %a", num, num.nextUp()); That one uses reals. > } > ----- > > This prints: > > nextUp of 0x1p+0 is 0x1.0000000000001p+0 > nextUp of 0x1p+0 is 0x1.0000000000000002p+0 > > Any idea why the results are different? There is no difference. They are both 1. ;) The type of floating point literals is double. You are seeing the precision difference between doubles and reals. Ali |
February 17, 2014 Re: Strange result with nextUp for reals | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | If you swap the line to writefln("nextUp of %a is %a", 1.0L, 1.0L.nextUp()); you get the same result as the second case. |
Copyright © 1999-2021 by the D Language Foundation