PLplot 5.15.0
Loading...
Searching...
No Matches
nn/nan.h
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// File: nan.h
4//
5// Created: 18/10/2001
6//
7// Author: Pavel Sakov
8// CSIRO Marine Research
9//
10// Purpose: NaN definition
11//
12// Description: Should cover machines with 64 bit doubles or other machines
13// with GCC
14//
15// Revisions: None
16//
17//--------------------------------------------------------------------------
18
19#if !defined ( _NAN_H )
20#define _NAN_H
21
22#if ( defined ( __GNUC__ ) && !defined ( __ICC ) ) || defined ( __BORLANDC__ )
23
24static const double NaN = 0.0 / 0.0;
25
26#ifdef __BORLANDC__
27 #define isnan _isnan
28 #define copysign _copysign
29#endif
30
31#elif defined ( _WIN32 )
32
33#if !defined ( _MSC_VER )
34
35static unsigned _int64 lNaN = ( (unsigned _int64) 1 << 63 ) - 1;
36
37#define NaN ( *(double *) &lNaN )
38
39#else
40
41// MSVC/C++ 6.0 reports a version 1200,
42// MSVC/C++ 2003 reports a version 1300
43//
44#include <float.h>
45#include <ymath.h>
46#undef NaN
47#if _MSC_VER < 1300
48#define NaN _Nan._D
49#else
50#define NaN _Nan._Double
51#endif
52
53#define isnan _isnan
54#define copysign _copysign
55
56#endif
57
58#else
59
60static const long long lNaN = ( (unsigned long long) 1 << 63 ) - 1;
61
62#define NaN ( *(double *) &lNaN )
63
64#endif
65
66#endif
67
68
69//#if !defined(_NAN_H)
70// #define _NAN_H
71//
72// #if defined(__GNUC__)
73// static const double NaN = 0.0 / 0.0;
74// #elif defined(BIG_ENDIAN) || defined(_BIG_ENDIAN)
75// static const long long lNaN = 0x7fffffffffffffff;
76//
77// #define NaN (*(double*)&lNaN)
78// #else
79// static const long long lNaN = 0xfff8000000000000;
80//
81// #define NaN (*(double*)&lNaN)
82// #endif
83//
84// #endif
static const long long lNaN
Definition: nn/nan.h:60
#define NaN
Definition: nn/nan.h:62