# FreeBSD Manual Pages

```DateTime::Util::Calc(3User Contributed Perl DocumentatiDateTime::Util::Calc(3)

NAME
DateTime::Util::Calc - DateTime Calculation Utilities

SYNOPSIS
use DateTime::Util::Calc qw(polynomial);

my @coeffs = qw(2 3 -2);
my \$x	    = 5;
my \$rv	    = polynomial(\$x, @coeffs);

DESCRIPTION
This 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.

FUNCTIONS
max(\$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	UTC

bigfloat(\$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.

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  p.22. The basic idea
is :

x = base
while (! check(x) ) {
x =	next(x);
}
return	x

%opts can contain the following parameters:

base
The initial value to	use to start the search	process. The value can
be anything,	but you	must provide "check" and "next"	parameters
that	are capable of handling	the type of thing you specified.

check (coderef)
Code	to be executed to determine the	end of the search. The
function receives the current value of "x", and should return a
true	value if the condition to end the loop has been	reached

next (coderef, optional)
Code	to be executed to determine the	next value of "x". The
function receives the current value of "x", and should return the
value to be used for	the next iteration.

If unspecified, it will use a function that blindly adds 1 to
whatever x is.  (so if you specified	a number for "base", it	should
work	-- but if you passed an	object like DateTime, it will probably
be an error)

So for example, to iterate through 1 through 9, you could do something
like this

my \$x = search_next(
base	=> 1,
check => sub	{ \$_	== 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	{ \$_	+ DateTime::Duration->new(days => 1) }
);

Converts	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

rev180(\$angle_in_degrees)
Reduces input to	within +180..+180 degrees

angle(\$h, \$m, \$s)
AUTHOR
Copyright (c) 2004-2007 Daisuke Maki <daisuke@endeworks.jp>

perl v5.32.1			  2007-05-29	       DateTime::Util::Calc(3)
```

NAME | SYNOPSIS | DESCRIPTION | FUNCTIONS | AUTHOR

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=DateTime::Util::Calc&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>