-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,19 +39,28 @@ public FloatDToAPrimitiveNode(RubyContext context, SourceSection sourceSection) | |
@TruffleBoundary | ||
@Specialization | ||
public DynamicObject dToA(double value) { | ||
String string = String.format(Locale.ENGLISH, "%.9f", value); | ||
// Large enough to print all digits of Float::MIN. | ||
String string = String.format(Locale.ENGLISH, "%.1022f", value); | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
nirvdrum
Author
Contributor
|
||
|
||
if (string.toLowerCase(Locale.ENGLISH).contains("e")) { | ||
throw new UnsupportedOperationException(); | ||
} | ||
|
||
string = string.replace("-", ""); | ||
while (string.charAt(string.length() - 1) == '0') { | ||
string = string.substring(0, string.length() - 1); | ||
} | ||
|
||
final int decimal; | ||
int decimal; | ||
|
||
if (string.startsWith("0.")) { | ||
string = string.replace("0.", ""); | ||
decimal = 0; | ||
|
||
while (string.charAt(0) == '0') { | ||
string = string.substring(1, string.length()); | ||
--decimal; | ||
} | ||
} else { | ||
decimal = string.indexOf('.'); | ||
|
||
|
This is the base 2 exponent of Float::MIN, the base 10 is -308 (normal) or -322. And then add for the few digits, in the case of Double.MIN_VALUE I found 325.
The approach of creating substring after seems highly inefficient though, could we just get the relevant bits with something like
"%.20g"
?