json
json copied to clipboard
Incorrect floating point parsing
Description
I have a sample json file which has an array of array of array of float weights.
{"input_size": 3, "layer_sizes": [2, 2], "weights": [[[0.50, 0.50, 0.50], [0.30, 0.30, 0.30]],[[0.40, 0.40, 0.40], [0.20, 0.20, 0.20]]]}
When I parse json the some of the floating points value show with less precision such as 0.30 is parsed as 0.299999999999
Reproduction steps
` std::ifstream file(fileName); nlohmann::json data = nlohmann::json::parse(file);
int inputSize = data["input_size"];
std::vector<int> layerSizes = data["layer_sizes"];
auto weights = data["weights"];`
Expected vs. actual results
expected is to have .30 instead of parsing floating point as .29999999999.
Minimal code example
` std::ifstream file(fileName);
nlohmann::json data = nlohmann::json::parse(file);
int inputSize = data["input_size"];
std::vector<int> layerSizes = data["layer_sizes"];
auto weights = data["weights"];`
json file:
`{"input_size": 3, "layer_sizes": [2, 2], "weights": [[[0.50, 0.50, 0.50], [0.30, 0.30, 0.30]],[[0.40, 0.40, 0.40], [0.20, 0.20, 0.20]]]}`
Error messages
No response
Compiler and operating system
VS2017
Library version
3.11.3
Validation
- [X] The bug also occurs if the latest version from the
develop
branch is used. - [X] I can successfully compile and run the unit tests.
The number 0.3 cannot be exactly represented as double, see https://float.exposed/0x3fd3333333333333. This is independent of this library, C++, or your operating system. See https://json.nlohmann.me/features/types/number_handling for more information.