NAME

Encode::Float - Encode/decode float as a string for sorting.

SYNOPSIS

use Encode::Float;
my $encoder = Encode::Float->new();
my @list;
for (my $i = 0 ; $i < 10 ; $i++)
{
  my $float = (.5 - rand) * 10**int(10 - 20 * rand);
  $float = 0 if $i == 0;
  my $encoded = $encoder->encode($float);
  my $decoded = $encoder->decode($encoded);
  my $error   = $encoder->getRelativeDifference($float, $decoded);
  push @list, [ $encoded, $float, $decoded, $error ];
}
@list = sort { $a->[0] cmp $b->[0] } @list;
foreach (@list)
{
  print join(',', @$_) . "\n";
}

DESCRIPTION

Encode::Float encodes and decodes floating point numbers as fixed length positive decimal integers that preserve their order (less rounding errors), that is, sorting the encoded integers also sorts the floating point numbers.

CONSTRUCTOR

new

The method new creates an instance of the Encode::Float class with the following parameter:

digitsOfAccuracy
digitsOfAccuracy => 16

digitsOfAccuracy is an optional parameter that sets the number of decimal digits to preserve in the floating point number; the default is 16.

METHODS

encode

The method encode takes a floating point number as its only parameter and returns its integer encoding.

decode

The method decode takes an encoded floating point number (a positive integer) and returns its floating point number.

getRelativeDifference

The method getRelativeDifference (floatA, floatB) computes the relative difference between the floating point numbers floatA and floatB, which is abs(floatA - floatB)/max(abs(floatA), abs(floatB)) or zero if both numbers are zero.

INSTALLATION

Use CPAN to install the module and all its prerequisites:

perl -MCPAN -e shell
>install Encode::Float

BUGS

Please email bugs reports or feature requests to bug-encode-float@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Encode-Float. The author will be notified and you can be automatically notified of progress on the bug fix or feature request.

AUTHOR

Jeff Kubina<jeff.kubina@gmail.com>

COPYRIGHT

Copyright (c) 2013 Jeff Kubina. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.

KEYWORDS

decoding, double, encoding, float

SEE ALSO

CPAN, Sort::External