mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Added builtin functions to convert between degrees, minutes and seconds and degrees under the config("mod") round rules: dms2d(d, m, s [,rnd]) - convert deg, min, and secs to deg dm2d(d, m [,rnd]) - convert deg, min to deg See help/dms2d and help/dm2d. Example: ; print dms2d(12, 20, 44.16); 12.3456 ; print dm2d(3601, -25.5594); 0.57401 Added builtin functions to convert between gradians, minutes and seconds and gradians under the config("mod") round rules: gms2g(g, m, s [,rnd]) - convert grad, min, and secs to grad gm2g(g, m [,rnd]) - convert grad and min to grad See help/g2gms and help/g2gm. Example: ; print gms2g(12, 20, 44.16); 12.3456 ; print gm2g(4001, -25.5594); 0.57401 Added builtin functions to convert between hours, minutes and seconds and hours under the config("mod") round rules: hms2h(h, m, s [,rnd]) - convert hours, min, and secs to hours hm2h(h, m [,rnd]) - convert hours, min to hours See help/hms2h and help/hm2h. Example: ; print hms2h(12, 20, 44.16); 12.3456 ; print hm2h(241, -25.5594); 0.57401
133 lines
4.2 KiB
Plaintext
133 lines
4.2 KiB
Plaintext
NAME
|
|
d2dms - convert degrees into degrees, minutes, and seconds
|
|
|
|
SYNOPSIS
|
|
d2dms(degs, d, m, s [,rnd])
|
|
|
|
TYPES
|
|
degs real
|
|
d null-or-real-valued lvalue with assign-to permission
|
|
m null-or-real-valued lvalue with assign-to permission
|
|
s null-or-real-valued lvalue with assign-to permission
|
|
rnd nonnegative integer, defaults to config("mod")
|
|
|
|
return mod(degs, 360, rnd)
|
|
|
|
DESCRIPTION
|
|
Convert degs degrees into d degrees, m minutes, and s seconds.
|
|
|
|
The return value is a normalized number of degrees, and is equivalent
|
|
to the following:
|
|
|
|
return_value = mod(degs, 360, rnd);
|
|
|
|
The argument rnd, if not given, defaults to config("mod").
|
|
For more information on the effects of rnd, see "help mod".
|
|
|
|
Depending on the rounding mode, the return could be a real value
|
|
in the interval [0, 360) or a real value in the interval (-360, 0].
|
|
For the default round mode, the return value is in the interval [0, 360).
|
|
|
|
The d argument will be an integer number of degrees.
|
|
|
|
The value d will be set as if the following were used:
|
|
|
|
d = int(return_value);
|
|
|
|
For some rounding modes, d will be an integer in the interval [0, 360).
|
|
For other rounding modes, d will be an integer in the interval (-360, 0].
|
|
For the default round mode, d is in the interval [0, 360).
|
|
|
|
The m argument will be an integer number of minutes.
|
|
|
|
The value m will be set as if the following were used:
|
|
|
|
tmp = return_value - d;
|
|
tmp_m = tmp * 60;
|
|
free(tmp);
|
|
m = int(tmp_m);
|
|
|
|
For some rounding modes, m will be an integer in the interval [0, 60).
|
|
For other rounding modes, m will be an integer in the interval (-60, 0].
|
|
For the default round mode, m will be in the interval [0, 60).
|
|
|
|
The s argument will be a real number of seconds.
|
|
|
|
The value s will be set as if the following were used:
|
|
|
|
tmp = tmp_m - m;
|
|
free(tmp_m);
|
|
s = tmp * 60;
|
|
free(tmp);
|
|
|
|
For some rounding modes, s will be a real value in the interval [0, 60).
|
|
For other rounding modes, s will be a real value in the interval (-60, 0].
|
|
For the default round mode, s will be in the interval [0, 60).
|
|
|
|
The following shows relationship between the return value and the resulting
|
|
d, m, and s values:
|
|
|
|
return_value == d + m/60 + s/3600;
|
|
|
|
|
|
EXAMPLE
|
|
/* if args are undefined, pre-declare them or assign them as args */
|
|
|
|
; global d, m, s;
|
|
|
|
; print d2dms(12.3456,d,m,s), d, m, s;
|
|
12.3456 12 20 44.16
|
|
; print d2dms(1234.5678,d,m,s), d, m, s;
|
|
154.5678 154 34 4.08
|
|
; print d2dms(-1234.5678,d,m,s), d, m, s;
|
|
205.4322 205 25 55.92
|
|
|
|
; print d2dms(654.321,deg=,min=,sec=), deg, min, sec;
|
|
294.321, 294, 19, 15.6
|
|
; print d2dms(-654.321,deg=,min=,sec=), deg, min, sec;
|
|
65.679 65 40 44.4
|
|
; print d2dms(360.321,deg=,min=,sec=), deg, min, sec;
|
|
0.321 0 19 15.6
|
|
|
|
/* certain non-default rounding modes can return negative values */
|
|
|
|
; print d2dms(654.321,deg=,min=,sec=,1), deg, min, sec;
|
|
-65.679 -65 -40 -44.4
|
|
; print d2dms(-654.321,deg=,min=,sec=,1), deg, min, sec;
|
|
-294.321 -294 -19 -15.6
|
|
; print d2dms(360.321,deg=,min=,sec=,1), deg, min, sec;
|
|
-359.679 -359 -40 -44.4
|
|
|
|
|
|
LIMITS
|
|
none
|
|
|
|
LINK LIBRARY
|
|
none
|
|
|
|
SEE ALSO
|
|
config, d2dm, dm2d, dms2d, g2gm, g2gms, gm2g, gms2g,
|
|
h2hm, h2hms, hm2d, hms2d, mod
|
|
|
|
## Copyright (C) 2021 Landon Curt Noll
|
|
##
|
|
## Calc is open software; you can redistribute it and/or modify it under
|
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
|
## as published by the Free Software Foundation.
|
|
##
|
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
## Public License for more details.
|
|
##
|
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
##
|
|
## Under source code control: 2021/09/25 17:24:51
|
|
## File existed as early as: 2021
|
|
##
|
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|