Skip to content
forked from dtolnay/dtoa

Fast functions for printing floating-point primitives to an io::Write

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

pinecone-io/dtoa

 
 

Repository files navigation

Pinecone modifications

This branch has been modified so the output matches that of nholmann/json.

We use this for serializing f64 before sending in a JSON object tospanner.

Internally spanner appears to use zetasql (https://github.com/google/zetasql) which uses nholmann/json (https://github.com/nlohmann/json/).

ZetaSQL will not accept a float in a json structure if it does not roundtrip to the same value when serialized. By serializing the floats using a grisu2 implementation equivalent to nholmann/json, we are guaranteed that the float will be accepted.

You can test this out by pulling the zetasql repo and running:

bazel run //zetasql/tools/execute_query:execute_query \
    -- "select PARSE_JSON('2.250497700094831e+307');"

The tests require data generated by the nholmann/json library. To generate it:

$ git submodule init
$ git submodule update
$ c++ -I"nholmann_json/include" -std=c++17 -o gen_test_data gen_test_data.cc
$ ./gen_test_data
$ cargo test

dtoa

github crates.io docs.rs build status

This crate provides fast conversion of floating point primitives to decimal strings. The implementation is a straightforward Rust port of Milo Yip's C++ implementation dtoa.h. The original C++ code of each function is included in comments.

See also itoa for printing integer primitives.

Version requirement: rustc 1.36+

[dependencies]
dtoa = "1.0"

Example

fn main() {
    let mut buffer = dtoa::Buffer::new();
    let printed = buffer.format(2.71828f64);
    assert_eq!(printed, "2.71828");
}

Performance (lower is better)

performance


License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Fast functions for printing floating-point primitives to an io::Write

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 89.2%
  • C++ 7.0%
  • TeX 3.8%