Skip to content

Commit e0502d7

Browse files
authored
More efficient serialization of floats and doubles (plokhotnyuk#498)
1 parent 020b6b4 commit e0502d7

File tree

1 file changed

+8
-19
lines changed
  • jsoniter-scala-core/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/core

1 file changed

+8
-19
lines changed

jsoniter-scala-core/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/core/JsonWriter.scala

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,16 +1873,10 @@ final class JsonWriter private[jsoniter_scala](
18731873
}
18741874
dmIsTrailingZeros &= (s & 0x780000000L) == 0 // test if all reminders of divisions by 10 are zeros
18751875
if (dmIsTrailingZeros && even) {
1876-
while ((decimalNotation || dp >= 100) && {
1877-
p = dm * 3435973837L
1878-
(p & 0x780000000L) == 0 // test if reminder of division by 10 is zero
1879-
}) {
1880-
dp = (dp * 3435973837L >> 35).toInt // divide positive int by 10
1881-
dm = (p >> 35).toInt // divide positive int by 10
1882-
dvIsTrailingZeros &= lastRemovedDigit == 0
1883-
val newDv = (dv * 3435973837L >> 35).toInt // divide positive int by 10
1884-
lastRemovedDigit = dv - newDv * 10
1885-
dv = newDv
1876+
while ((decimalNotation || dv >= 99) && (p & 0x780000000L) == 0) { // test if reminder of division by 10 is zero
1877+
dv = (p >> 35).toInt // divide positive int by 10
1878+
p = dv * 3435973837L
1879+
lastRemovedDigit = 0 // disable rounding up
18861880
len -= 1
18871881
}
18881882
}
@@ -2075,16 +2069,11 @@ final class JsonWriter private[jsoniter_scala](
20752069
len -= 1
20762070
}
20772071
if (dmIsTrailingZeros && even) {
2078-
while ((decimalNotation || dp >= 100) && {
2079-
newDm = dm / 10
2080-
newDm * 10 == dm
2081-
}) {
2082-
dp /= 10
2072+
while ((decimalNotation || dv >= 99) && newDm * 10 == dm) {
2073+
dv /= 10
20832074
dm = newDm
2084-
dvIsTrailingZeros &= lastRemovedDigit == 0
2085-
val newDv = dv / 10
2086-
lastRemovedDigit = dv - newDv * 10
2087-
dv = newDv
2075+
newDm = dv
2076+
lastRemovedDigit = 0 // disable rounding up
20882077
len -= 1
20892078
}
20902079
}

0 commit comments

Comments
 (0)