This is an artifact of JavaScript, which even as of ES6 uses IEEE 754 double-precision floats for all numeric values. jq likely uses the same implementation internally for compatibility reasons and to avoid surprises of a different kind.
See https://www.ecma-international.org/ecma-262/6.0/#sec-ecmascr...