The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Package {zmij}


Title: Round-Trip-Safe Double-Precision Formatting
Version: 0.1.0
Description: Converts double-precision floating-point values to decimal strings with the shortest significands needed for round-trip recovery. Uses the 'zmij' algorithm through a vendored 'Rust' implementation. The method is described in Zverovich (2025), "Faster Double-to-String Conversion" https://vitaut.net/posts/2025/faster-dtoa/. Provides vectorized formatting, a correctly rounded inverse parser, and explicit handling of missing and non-finite values.
License: MIT + file LICENSE
Copyright: file inst/COPYRIGHTS
URL: https://nanx.me/zmij/, https://github.com/nanxstats/zmij
BugReports: https://github.com/nanxstats/zmij/issues
Encoding: UTF-8
Depends: R (≥ 4.2)
Suggests: testthat (≥ 3.0.0)
SystemRequirements: Cargo (Rust's package manager), rustc >= 1.71.0, xz
Config/rextendr/version: 0.5.0
Config/testthat/edition: 3
RoxygenNote: 8.0.0
NeedsCompilation: yes
Packaged: 2026-07-24 04:01:45 UTC; nanx
Author: Nan Xiao ORCID iD [aut, cre, cph], David Tolnay [ctb, cph] (Author of the vendored Rust zmij crate), Victor Zverovich [ctb, cph] (Author of the zmij algorithm and original C++ implementation)
Maintainer: Nan Xiao <me@nanx.me>
Repository: CRAN
Date/Publication: 2026-08-04 16:20:02 UTC

Format Double-Precision Values with zmij

Description

Convert numeric values to decimal strings with the shortest significands that recover the original IEEE 754 binary64 values when parsed using round-to-nearest, ties-to-even rounding.

Usage

format_double(x)

Arguments

x

A numeric vector, matrix, or array.

Details

Integer inputs are converted to double precision before formatting. zmij uses fixed notation for decimal exponents from -5 through 15 and scientific notation outside that range. Other attributes, including classes, are not retained because the returned values are character strings.

Value

A character vector with the same length and shape as x. Names and dimensions are preserved. Missing values remain NA; NaN, positive infinity, and negative infinity become "NaN", "inf", and "-inf", respectively.

References

Zverovich V (2025). "Faster double-to-string conversion." https://vitaut.net/posts/2025/faster-dtoa/.

Tolnay D. "zmij: A double-to-string conversion algorithm based on Schubfach." https://github.com/dtolnay/zmij.

Examples

x <- c(pi, 0.1, -0, .Machine$double.xmin, .Machine$double.xmax)
formatted <- format_double(x)
formatted
identical(parse_double(formatted), x)

format_double(c(NA_real_, NaN, Inf, -Inf))


Parse Double-Precision Strings

Description

Parse decimal strings into IEEE 754 binary64 values using Rust's correctly rounded parser. This is the inverse of format_double() for every finite double.

Usage

parse_double(x)

Arguments

x

A character vector, matrix, or array.

Details

The parser accepts decimal and scientific notation, along with "NaN", "inf", and "-inf". Leading or trailing whitespace and other invalid strings cause an error that identifies the first invalid element.

Using parse_double() avoids platform-specific edge cases in R's built-in decimal parser near the limits of the binary64 range.

Value

A double vector with the same length and shape as x. Names and dimensions are preserved. Missing strings remain NA_real_.

Examples

x <- c(pi, 0.1, -0, .Machine$double.xmin, .Machine$double.xmax)
identical(parse_double(format_double(x)), x)

parse_double(c("1.5", "3e-1", NA_character_, "inf"))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.