The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Number::Closest::NonOO - Find number(s) closest to a number in a list of numbers

VERSION

version 0.03

SYNOPSIS

 use Number::Closest::NonOO qw(find_closest_number find_farthest_number);
 my $nums = find_closest_number(number=>3, numbers=>[1, 3, 5, 10], items => 2); # => [3, 1]

 $nums = find_farthest_number(number=>3, numbers=>[1, 3, 5, 10]); # => 10

DESCRIPTION

FAQ

How do I find closest numbers that are {smaller, larger} than specified number?

You can filter (grep) your list of numbers first, for example to find numbers that are closest and smaller or equal to 3:

 my @nums = grep {$_ <= 3} 1, 3, 5, 2, 4;
 my $res = find_closest_number(number => 3, numbers => \@nums);

How do I find unique closest number(s)?

Perform uniq() (see List::MoreUtils) on the resulting numbers.

SEE ALSO

Number::Closest. Number::Closest::NonOO is a non-OO version of Number::Closest, with some additional features: customize handling NaN/Inf, find farthest number.

AUTHOR

Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Steven Haryanto.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

FUNCTIONS

None are exported by default, but they are exportable.

find_closest_number(%args) -> any

Find number(s) closest to a number in a list of numbers.

Arguments ('*' denotes required arguments):

  • inf => str (default: "nothing")

    Specify how to handle Inf.

    exclude means the items will first be excluded from the list. nothing will do nothing about it and will produce a warning if target number is an infinite, number will treat Inf like a very large number, i.e. Inf is closest to Inf and largest positive numbers, -Inf is closest to -Inf and after that largest negative numbers.

    I'd reckon that number is the behavior that most people want when dealing with infinites. But since it's slower, it's not the default and you have to specify it specifically. You should choose number if target number is infinite.

  • items => int (default: 1)

    Return this number of closest numbers.

  • nan => str (default: "exclude")

    Specify how to handle NaN and non-numbers.

    exclude means the items will first be excluded from the list. nothing will do nothing about it, meaning there will be warnings when comparing non-numbers.

  • number* => num

    The target number.

  • numbers* => array

    The list of numbers.

Return value:

find_farthest_number(%args) -> any

Find number(s) farthest to a number in a list of numbers.

Arguments ('*' denotes required arguments):

  • inf => str (default: "nothing")

    Specify how to handle Inf.

    exclude means the items will first be excluded from the list. nothing will do nothing about it and will produce a warning if target number is an infinite, number will treat Inf like a very large number, i.e. Inf is closest to Inf and largest positive numbers, -Inf is closest to -Inf and after that largest negative numbers.

    I'd reckon that number is the behavior that most people want when dealing with infinites. But since it's slower, it's not the default and you have to specify it specifically. You should choose number if target number is infinite.

  • items => int (default: 1)

    Return this number of closest numbers.

  • nan => str (default: "exclude")

    Specify how to handle NaN and non-numbers.

    exclude means the items will first be excluded from the list. nothing will do nothing about it, meaning there will be warnings when comparing non-numbers.

  • number* => num

    The target number.

  • numbers* => array

    The list of numbers.

Return value: