|
NAMEDateTime::Util::Calc - DateTime Calculation UtilitiesSYNOPSISuse DateTime::Util::Calc qw(polynomial); my @coeffs = qw(2 3 -2); my $x = 5; my $rv = polynomial($x, @coeffs); DESCRIPTIONThis module contains some common calculation utilities that are required to perform datetime calculations, specifically from "Calendrical Calculations" -- they are NOT meant to be general purpose.Nothing is exported by default. You must either explicitly export them, or use as fully qualified function names. FUNCTIONSmax($a, $b)min($a, $b)max() returns the bigger of $a and $b. min() returns the smaller of $a and $b.polynomial($x, @coefs)Calculates the value of a polynomial equation, based on Horner's Rule.c + b * x + a * (x ** 2) x = 5 is expressed as: polynomial(5, c, b, a); moment($dt)dt_from_moment($moment)moment() converts a DateTime object to moment, which is RD days + the time of day as fraction of the total seconds in a day.dt_from_moment() converts a moment to DateTime object. rata_die()Returns a new DateTime object that is set to Rata Die, 0001-01-01 00:00:00 UTCbigfloat($v)bigint($v)If the value $v is not a Math::BigFloat object, returns the value converted to Math::BigFloat. Otherwise returns the value itself.bigint() does the same for Math::BigInt. bf_downgrade($v)bi_downgrade($v)These have been deprecated.truncate_to_midday($dt)Truncates the DateTime object to 12:00 noon.sin_deg($degrees)cos_deg($degrees)tan_deg($degrees)asin_deg($degrees)acos_deg($degrees)Each of these functions calculates their respective values based on degrees, not radians (as Perl's version of sin() and cos() would do).mod($v,$mod)Calculates the modulus of $v over $mod. Perl's built-in modulus operator (%) for some reason rounds numbers UP when a fractional number's modulus is taken. Many of the calculations also needed the fractional part of the calculation, so this function takes care of both.Example: mod(12.234, 5) = 2.234 amod($v,$mod)This function is almost identical to mod(), but when the regular modulus value is 0, returns $mod instead of 0.Example: amod(11, 5) = 1 amod(10, 5) = 5 amod(9, 5) = 4 amod(8, 5) = 3 binary_search($hi, $lo, $mu, $phi)This is a special version of binary search, where the terminating condition is determined by the result of coderefs $mu and $phi.$mu is passed the value of $hi and $lo. If it returns true upon execution, then the search terminates. $phi is passed the next median value. If it returns true upon execution, then the search terminates. If the above two fails, then $hi and $lo are re-computed for the next iteration. search_next(%opts)Performs a "linear" search until some condition is met. This is a generalized version of the formula defined in [1] p.22. The basic idea is :x = base while (! check(x) ) { x = next(x); } return x %opts can contain the following parameters:
So for example, to iterate through 1 through 9, you could do something like this my $x = search_next( base => 1, check => sub { $_[0] == 9 } ); And $x will be set to 9. For a more interesting example, we could look for a DateTime object $dt matching a certain condition "foo()": my $dt = search_next( base => $base_date, check => \&foo, next => sub { $_[0] + DateTime::Duration->new(days => 1) } ); deg2radConverts degrees to radians using Math::Trig, but works for Math::BigInt objects as well.revolution($angle_in_degrees)Reduces any angle to within the first revolution by sbtracting or adding even multiples of 360.0.rev180($angle_in_degrees)Reduces input to within +180..+180 degreesangle($h, $m, $s)AUTHORCopyright (c) 2004-2007 Daisuke Maki <daisuke@endeworks.jp>
Visit the GSP FreeBSD Man Page Interface. |