NAME

Math::Ryu - perl interface to the ryu C library.

DEPENDENCIES

This module includes the Ryu C library, which is available from github:
$ git clone https://github.com/ulfjack/ryu.git /home/me/ryu_source

DESCRIPTION

Convert an NV to a decimal string, such that no information is
lost, yet keeping the string as short as possible.

NOTE:
NVs whose size is greater than 8 bytes are not currently catered for.

SYNOPSIS

use Math::Ryu qw(:all);

my $str = d2s(0.1);
print $str;           # 1E-1

$str = d2s(1.4 / 10);
print $str;           # 1.3999999999999999E-1

$str = d2s(sqrt 2);
print $str;           # 1.4142135623730951E0

FUNCTIONS

$str = d2s($nv);
 $nv holds a floating point numeric value.
 $str is a string in floating point format, that accurately
 and succinctly represents the value held by $nv.
 $str, when correctly assigned back to a perl number, will
 always be equivalent to $nv.
 This in stark contrast to perl's interpolation which does not
 guarantee that the condition ("$nv" == $nv) is true, even for
 non-nan values of $nv. (Eg if $nv is sqrt 2.0 or 1.4/10 .)
 Also, $str will contain as few digits as possible, without
 compromising that accuracy.

$str = d2fixed($nv, $digits);
 $str is a $digits-decimal fixed point representation of $nv.
 For example, d2sfixed(1 / 10000, 6) returns '0.000100'.

$str = d2exp($nv, $digits);
 $str is a $digits-decimal floating point representation of $nv.
 For example, d2exp(1 / 10000, 6) returns '1.000000e-04'.


$str = d2s_buffered($nv);                       # Not very useful
 Returns the same as d2s($nv).

($str, $len) = d2s_buffered_n($nv);             # Not very useful
 $str is the same as returned by d2s($nv).
 $len is length($str).

$str = d2fixed_buffered($nv, $digits);           # Not very useful
 Returns the same as d2fixed($nv, $digits).

($str, $len) = d2fixed_buffered_n($nv, $digits); # Not very useful
 $str is the same as returned by d2fixed($nv, $digits).
 $len is length($str).

$str = d2exp_buffered($nv, $digits);             # Not very useful
 Returns the same as d2exp($nv, $digits).

($str, $len) = d2exp_buffered_n($nv, $digits);   # Not very useful
 $str is the same as returned by d2exp($nv, $digits).
 $len is length($str).

TODO

Cover larger precision NV types (ie long double and __float128)

LICENSE

This program is free software; you may redistribute it and/or
modify it under the same terms as Perl itself.
Copyright 2021 Sisyphus

AUTHOR

Sisyphus <sisyphus at(@) cpan dot (.) org>