casacore
Loading...
Searching...
No Matches
Constants.h
Go to the documentation of this file.
1//# Constants.h: Mathematical and numerical constants
2//# Copyright (C) 1993,1994,1995,1997,1998,1999,2000,2001
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id$
27
28#ifndef CASA_CONSTANTS_H
29#define CASA_CONSTANTS_H
30
31#include <casacore/casa/aips.h>
32
33#if defined (sun) && ! defined (AIPS_SOLARIS)
34# include <sys/limits.h>
35#else
36# include <limits.h>
37#endif
38
39#include <float.h>
40#if !defined(AIPS_DARWIN) && !defined(AIPS_BSD)
41#include <values.h>
42#endif
43
44#if defined (AIPS_OSF)
45# define LN_MAXFLOAT (M_LN2 * FMAXEXP)
46# define LN_MINFLOAT (M_LN2 * (FMINEXP -1))
47#endif
48
49namespace casacore { //# NAMESPACE CASACORE - BEGIN
50
51// <summary>Mathematical and numerical constants.</summary>
52
53// <use visibility=export>
54
55// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tConstants" demos="">
56
57//# // <prerequisite>
58//# // </prerequisite>
59
60//# // <etymology>
61//# // </etymology>
62
63// <synopsis>
64// The constants and conversion factors are defined here as double precision
65// values. Where single precision calculations are done in a situation where
66// processing speed is of concern, for example within the inner loop of an
67// expensive algorithm, a separate single precision variable should be defined
68// for use within the loop.
69//
70// </synopsis>
71//
72// <note role=warning> The following list is generated by hand, and may be incomplete.
73// After future revision of ccx2html the real data will be displayed </note>
74
75// <h3>Floating point limits</h3>
76// <srcblock>
77// flt_min the minimum single precision floating point number,
78// excluding denormalised numbers
79// minfloat the minimum single precision floating point number,
80// including denormalised numbers
81// dbl_min the minimum double precision floating point number,
82// excluding denormalised numbers
83// mindouble the minimum double precision floating point number,
84// including denormalised numbers
85// flt_max the maximum single precision floating point number
86// dbl_max the maximum double precision floating point number
87// flt_epsilon Minimum single precision floating point number X
88// such that 1+X does not equal X
89// dbl_epsilon Minimum double precision floating point number X
90// such that 1+X does not equal X
91// </srcblock>
92// <h3> Irrationals </h3>
93// <srcblock>
94// sqrt2 sqrt(2)
95// sqrt3 sqrt(3)
96// _1_sqrt2 1/sqrt(2)
97// _1_sqrt3 1/sqrt(3)
98// </srcblock>
99
100// <h3>Pi and functions thereof</h3>
101// <srcblock>
102// pi pi
103// _2pi 2*pi
104// pi_2 pi/2
105// pi_4 pi/4
106// _1_pi 1/pi
107// _2_pi 2/pi
108// _1_sqrtpi 1/sqrt(pi)
109// _2_sqrtpi 2/sqrt(pi)
110// </srcblock>
111
112// <h3>e and functions thereof</h3>
113// <srcblock>
114// e e
115// ln2 ln(2)
116// ln10 ln(10)
117// log2e log2(e)
118// log10e log10(e)
119// </srcblock>
120
121// <h3>gamma and functions thereof</h3>
122// <srcblock>
123// gamma gamma
124// lngamma ln(gamma)
125// etogamma e**gamma
126// </srcblock>
127
128// <h3>Fundamental physical constants (SI units)</h3>
129// <note role=warning> Preserved for legacy reasons only.
130// See <linkto class=QC>QC class</linkto> for other physical constants. </note>
131// <srcblock>
132// c velocity of light (m/s)
133// </srcblock>
134
135// <h3>Numerical conversion factors</h3>
136// <srcblock>
137// yotta e+24 (Y)
138// zetta e+21 (Z)
139// exa e+18 (E)
140// peta e+15 (P)
141// tera e+12 (T)
142// giga e+09 (G)
143// mega e+06 (M)
144// kilo e+03 (k)
145// hecto e+02 (h)
146// deka e+01 (da)
147// deci e-01 (d)
148// centi e-02 (c)
149// milli e-03 (m)
150// micro e-06 (u)
151// nano e-09 (n)
152// pico e-12 (p)
153// femto e-15 (f)
154// atto e-18 (a)
155// zepto e-21 (z)
156// yocto e-24 (y)
157// </srcblock>
158
159// <h3>Angular measure</h3>
160// <srcblock>
161// radian radian
162// circle circle
163// degree degree
164// arcmin arcminute
165// arcsec arcsecond
166// </srcblock>
167
168// <h3>Solid angular measure</h3>
169// <srcblock>
170// steradian steradian
171// sphere sphere
172// square_degree square degree
173// square_arcmin square arcminute
174// square_arcsec square arcsecond
175// </srcblock>
176
177// <h3>Time interval</h3>
178// <srcblock>
179// second second
180// minute minute
181// hour hour
182// day day
183// </srcblock>
184
185// <h3> Machine constants </h3>
186//
187// Implementation-defined limits usually defined in <src><limits.h></src>,
188// <src><float.h></src>, and <src><values.h></src> as preprocessor
189// defines. They are
190// Inclusion of <src><casa/BasicSL/Constants.h</src> is
191// sufficient to ensure that they are defined for any particular
192// implementation, and the correct functioning of the <src>tConstants</src>
193// test program guarantees this.
194//
195// In future use will be made of the (standard) <em>numeric_limits</em>
196// template from the <src><limits></src> include file.
197
198// <srcblock>
199//
200// Refer to Section 3.2c, pp28-30 of
201// "The Annotated C++ Reference Manual",
202// Ellis, M.A., and Stroustrup, B.,
203// Addison-Wesley Publishing Company, 1990.
204// IBSN 0-201-51459-1.
205//
206// and
207//
208// Appendix B11, pp257-8 of
209// "The C Programming Language", 2nd ed.,
210// Kernighan, B.W., and Ritchie, D.M.,
211// Prentice Hall Software Series, 1988.
212// IBSN 0-13-110362-8.
213//
214// </srcblock>
215
216// <h3> Constants defined in limits.h </h3>
217// (these are part of the ANSI C and hence POSIX standards).
218// Acceptable limits defined by the standard are quoted.
219// <srcblock>
220//
221// CHAR_BIT 8 Maximum bits in a byte.
222// CHAR_MIN 0 or Minimum value of 'char'.
223// SCHAR_MIN
224// CHAR_MAX UCHAR_MAX or Maximum value of 'char'.
225// SCHAR_MAX
226// SCHAR_MIN -127 Minimum value of 'signed char'.
227// SCHAR_MAX +127 Maximum value of 'signed char'.
228// UCHAR_MAX 255 Maximum value of 'unsigned char'.
229// MB_LEN_MAX Maximum bytes in multibyte character.
230//
231// SHRT_MIN -32767 Minimum value of 'short'.
232// SHRT_MAX +32767 Maximum value of 'short'.
233// USHRT_MAX 65535 Maximum value of 'unsigned short'.
234//
235// INT_MIN -32767 Minimum value of 'int'.
236// INT_MAX +32767 Maximum value of 'int'.
237// UINT_MAX 65535 Maximum value of 'unsigned int'.
238//
239// LONG_MIN -2147483647 Minimum value of 'long'.
240// LONG_MAX +2147483647 Maximum value of 'long'.
241// ULONG_MAX 4294967295 Maximum value of 'unsigned long'.
242//
243// </srcblock>
244
245// <h3> Constants defined in float.h </h3>
246// (these are part of the ANSI C and hence POSIX standards).
247// Acceptable limits defined by the standard are quoted.
248// <srcblock>
249//
250// FLT_RADIX 2 Radix of exponent representation.
251// FLT_ROUNDS Floating point rounding mode for addition
252// -1: indeterminate
253// 0: towards zero
254// 1: to nearest
255// 2: toward +infinity
256// 3: toward -infinity
257//
258// FLT_MIN_EXP Minimum negative integer N such that FLT_RADIX
259// DBL_MIN_EXP raised to the Nth minus 1 is a normalized
260// LDBL_MIN_EXP floating point number.
261//
262// FLT_MAX_EXP Maximum integer N such that FLT_RADIX raised to
263// DBL_MAX_EXP the Nth minus 1 is representable.
264// LDBL_MAX_EXP
265//
266// FLT_MIN_10_EXP -37 Minimum negative integer N such that 10 raised
267// DBL_MIN_10_EXP -37 to the Nth is in the range of normalized
268// LDBL_MIN_10_EXP -37 floating point numbers.
269//
270// FLT_MAX_10_EXP 37 Maximum integer N such that 10 raised to the
271// DBL_MAX_10_EXP 37 Nth minus 1 is representable.
272// LDBL_MAX_10_EXP 37
273//
274// FLT_MANT_DIG Number of base FLT_RADIX digits in mantissa.
275// DBL_MANT_DIG
276// LDBL_MANT_DIG
277//
278// FLT_DIG 6 Decimal digits of precision.
279// DBL_DIG 10
280// LDBL_DIG 10
281//
282// FLT_EPSILON 1E-5 Minimum floating point number X such that
283// (use C::flt_epsilon in preference to this)
284// DBL_EPSILON 1E-9 1.0 + X does not equal 1.0.
285// (use C::dbl_epsilon in preference to this)
286// LDBL_EPSILON 1E-9
287//
288// FLT_MIN 1E-37 Minimum normalized positive floating point
289// (use C::flt_min in preference to this)
290// DBL_MIN 1E-37 number
291// (use C::dbl_min in preference to this)
292// LDBL_MIN 1E-37
293//
294// FLT_MAX 1E+37 Maximum representable floating point number.
295// (use C::flt_max in preference to this)
296// DBL_MAX 1E+37
297// (use C::dbl_max in preference to this)
298// LDBL_MAX 1E+37
299//
300// </srcblock>
301
302// <h3> Constants defined in values.h </h3>
303// (not part of the POSIX standard).
304// <note role=warning> These constants will disappear in the near future.
305// Do not use them in new code. </note>
306
307// <srcblock>
308//
309// HIBITS Value of a short integer with only the high-order
310// bit set (in most implementations, 0x8000).
311//
312// HIBITL Value of a long integer with only the high-order
313// bit set (in most implementations, 0x80000000).
314//
315// MAXSHORT Maximum value of a signed short integer (in most
316// implementations, 0x7FFF = 32767).
317//
318// MAXLONG Maximum value of a signed long integer (in most
319// implementations, 0x7FFFFFFF = 2147483647).
320//
321// MAXINT Maximum value of a signed regular integer (usually
322// the same as MAXSHORT or MAXLONG).
323//
324// MINFLOAT Minimum positive value of a single-precision
325// floating-point number (use C::minfloat in preference
326// to this)
327//
328// MINDOUBLE Minimum positive value of a double-precision
329// floating-point number (use C::mindouble in preference
330// to this)
331//
332// MAXFLOAT Maximum value of a single-precision floating-point number
333//
334// MAXDOUBLE Maximum value of a double-precision floating-point number
335//
336// FSIGNIF Number of significant bits in the mantissa of a
337// single-precision floating-point number.
338//
339// DSIGNIF Number of significant bits in the mantissa of a
340// double-precision floating-point number.
341// </srcblock>
342
343// <note role=tip>
344// Once cxx2html accepts the namespace type, the Dummy_Constants_Class can be
345// removed.<br>
346// Anyway, to use a constant (e.g. pi) use the C::pi construct now and later.
347// </note>
348
349
352
353namespace C {
354 //#--------------------------------------------------------------------
355 // Mathematical constants
356 //#--------------------------------------------------------------------
357 //# <group>
358
359 // Irrationals:
360 // <group>
361 // sqrt(2)
362 extern const Double sqrt2;
363 // sqrt(3)
364 extern const Double sqrt3;
365 // 1/sqrt(2)
366 extern const Double _1_sqrt2;
367 // 1/sqrt(3)
368 extern const Double _1_sqrt3;
369 // </group>
370
371 // Pi and functions thereof:
372 // <group>
373 // pi
374 extern const Double pi;
375 // 2*pi
376 extern const Double _2pi;
377 // pi/2
378 extern const Double pi_2;
379 // pi/4
380 extern const Double pi_4;
381 // 1/pi
382 extern const Double _1_pi;
383 // 2/pi
384 extern const Double _2_pi;
385 // 1/sqrt(pi)
386 extern const Double _1_sqrtpi;
387 // 2/sqrt(pi)
388 extern const Double _2_sqrtpi;
389 // </group>
390
391 // e and functions thereof:
392 // <group>
393 // e
394 extern const Double e;
395 // ln(2)
396 extern const Double ln2;
397 // ln(10)
398 extern const Double ln10;
399 // log2(e)
400 extern const Double log2e;
401 // log10(e)
402 extern const Double log10e;
403 // </group>
404
405 // gamma and functions thereof:
406 // <group>
407 // gamma
408 extern const Double gamma;
409 // ln(gamma)
410 extern const Double lngamma;
411 // e**gamma
412 extern const Double etogamma;
413 // </group>
414
415 // statistics related
416 // 1/(Phi^(-1)(3/4), see https://en.wikipedia.org/wiki/Median_absolute_deviation#Relation_to_standard_deviation
417 extern const Double probit_3_4;
418
419 //#--------------------------------------------------------------------
420 //# Mathematical constants
421 //#--------------------------------------------------------------------
422 //# </group>
423
424
425 //#--------------------------------------------------------------------
426 // Machine constants
427 //#--------------------------------------------------------------------
428 //# <group>
429 // floating point limits
430 // <group>
431 // the minimum single precision floating point number,
432 // excluding denormalised numbers
433 extern const Double flt_min;
434 // the minimum single precision floating point number,
435 // including denormalised numbers
436 extern const Double minfloat;
437 // the minimum double precision floating point number,
438 // excluding denormalised numbers
439 extern const Double dbl_min;
440 // the minimum double precision floating point number,
441 // including denormalised numbers
442 extern const Double mindouble;
443 // the maximum single precision floating point number
444 extern const Double flt_max;
445 // the maximum double precision floating point number
446 extern const Double dbl_max;
447 // Minimum single precision floating point number X such that 1+X does not
448 // equal X
449 extern const Double flt_epsilon;
450 // Minimum double precision floating point number X such that 1+X does not
451 // equal X
452 extern const Double dbl_epsilon;
453 // </group>
454
455 //#--------------------------------------------------------------------
456 //# Machine constants
457 //#--------------------------------------------------------------------
458 //# </group>
459
460 //#--------------------------------------------------------------------
461 //# Physical constants, and quantities
462 //#--------------------------------------------------------------------
463 //# <group>
464
465 // Fundamental physical constants (SI units):
466 // <group>
467 // velocity of light -- for legacy reasons only -- refer to PC
468 extern const Double c;
469 // </group>
470
471 //#--------------------------------------------------------------------
472 //# Physical constants, and quantities
473 //#--------------------------------------------------------------------
474 //# </group>
475
476
477
478 //#--------------------------------------------------------------------
479 //# Physical units
480 //#--------------------------------------------------------------------
481 //# <group>
482
483 //#-----------------------------
484 //# Numerical conversion factors
485 //#-----------------------------
486 //# <group>
487
488 // Numerical conversion factors
489 // <group>
490 // e+24 (Y)
491 extern const Double yotta;
492 // e+21 (Z)
493 extern const Double zetta;
494 // e+18 (E)
495 extern const Double exa;
496 // e+15 (P)
497 extern const Double peta;
498 // e+12 (T)
499 extern const Double tera;
500 // e+09 (G)
501 extern const Double giga;
502 // e+06 (M)
503 extern const Double mega;
504 // e+03 (k)
505 extern const Double kilo;
506 // e+02 (h)
507 extern const Double hecto;
508 // e+01 (da)
509 extern const Double deka;
510 // e-01 (d)
511 extern const Double deci;
512 // e-02 (c)
513 extern const Double centi;
514 // e-03 (m)
515 extern const Double milli;
516 // e-06 (u)
517 extern const Double micro;
518 // e-09 (n)
519 extern const Double nano;
520 // e-12 (p)
521 extern const Double pico;
522 // e-15 (f)
523 extern const Double femto;
524 // e-18 (a)
525 extern const Double atto;
526 // e-21 (z)
527 extern const Double zepto;
528 // e-24 (y)
529 extern const Double yocto;
530 // </group>
531
532 // Angular measure:
533 // <group>
534 // radian
535 extern const Double radian;
536 // circle
537 extern const Double circle;
538 // degree
539 extern const Double degree;
540 // arcminute
541 extern const Double arcmin;
542 // arcsecond
543 extern const Double arcsec;
544 // </group>
545
546 // Solid angular measure:
547 // <group>
548 // steradian
549 extern const Double steradian;
550 // sphere
551 extern const Double sphere;
552 // square degree
553 extern const Double square_degree;
554 // square arcminute
555 extern const Double square_arcmin;
556 // square arcsecond
557 extern const Double square_arcsec;
558 // </group>
559
560 //#-----------------------------
561 //# Numerical conversion factors
562 //#-----------------------------
563 //# </group>
564
565
566 //#----------------------------
567 //# Physical conversion factors
568 //#----------------------------
569 //# <group>
570
571 // Time interval [T]:
572 // <group>
573 // second
574 extern const Double second;
575 // minute
576 extern const Double minute;
577 // hour
578 extern const Double hour;
579 // day
580 extern const Double day;
581 // Difference between Julian Day and Modified Julian Day
582 extern const Double MJD0;
583 // </group>
584
585 //#----------------------------
586 //# Physical conversion factors
587 //#----------------------------
588 //# <group>
589
590 //#--------------------------------------------------------------------
591 //# Physical units
592 //#--------------------------------------------------------------------
593 //# <group>
594
595}
596
597
598} //# NAMESPACE CASACORE - END
599
600#endif
const Double hour
hour
const Double deka
e+01 (da)
const Double mega
e+06 (M)
const Double circle
circle
const Double pi_2
pi/2
const Double minfloat
the minimum single precision floating point number, including denormalised numbers
const Double pi
Pi and functions thereof:
const Double _2_pi
2/pi
const Double gamma
gamma and functions thereof:
const Double pi_4
pi/4
const Double steradian
Solid angular measure:
const Double c
Fundamental physical constants (SI units):
const Double day
day
const Double sqrt2
Mathematical constants.
const Double arcmin
arcminute
const Double flt_epsilon
Minimum single precision floating point number X such that 1+X does not equal X.
const Double exa
e+18 (E)
const Double micro
e-06 (u)
const Double flt_min
Machine constants.
const Double hecto
e+02 (h)
const Double ln10
ln(10)
const Double _2pi
2*pi
const Double square_arcsec
square arcsecond
const Double log2e
log2(e)
const Double dbl_max
the maximum double precision floating point number
const Double milli
e-03 (m)
const Double kilo
e+03 (k)
const Double square_arcmin
square arcminute
const Double square_degree
square degree
const Double degree
degree
const Double MJD0
Difference between Julian Day and Modified Julian Day.
const Double zepto
e-21 (z)
const Double flt_max
the maximum single precision floating point number
const Double yocto
e-24 (y)
const Double centi
e-02 (c)
const Double radian
Angular measure:
const Double peta
e+15 (P)
const Double dbl_epsilon
Minimum double precision floating point number X such that 1+X does not equal X.
const Double tera
e+12 (T)
const Double mindouble
the minimum double precision floating point number, including denormalised numbers
const Double etogamma
e**gamma
const Double yotta
Numerical conversion factors.
const Double zetta
e+21 (Z)
const Double _1_pi
1/pi
const Double femto
e-15 (f)
const Double _1_sqrt3
1/sqrt(3)
const Double atto
e-18 (a)
const Double lngamma
ln(gamma)
const Double _1_sqrtpi
1/sqrt(pi)
const Double log10e
log10(e)
const Double dbl_min
the minimum double precision floating point number, excluding denormalised numbers
const Double _2_sqrtpi
2/sqrt(pi)
const Double _1_sqrt2
1/sqrt(2)
const Double minute
minute
const Double sphere
sphere
const Double ln2
ln(2)
const Double pico
e-12 (p)
const Double sqrt3
sqrt(3)
const Double deci
e-01 (d)
const Double probit_3_4
statistics related 1/(Phi^(-1)(3/4), see https://en.wikipedia.org/wiki/Median_absolute_deviation#Rela...
const Double second
Time interval [T]:
const Double arcsec
arcsecond
const Double nano
e-09 (n)
const Double giga
e+09 (G)
const Double e
e and functions thereof:
this file contains all the compiler specific defines
Definition mainpage.dox:28
double Double
Definition aipstype.h:55