summaryrefslogtreecommitdiff
path: root/Cython/Includes/libcpp/limits.pxd
blob: c325263b7272fc1b4e0710d58d2699c3223ed3bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
cdef extern from "<limits>" namespace "std" nogil:
   enum float_round_style:
        round_indeterminate       = -1
        round_toward_zero         = 0
        round_to_nearest          = 1
        round_toward_infinity     = 2
        round_toward_neg_infinity = 3

   enum float_denorm_style:
        denorm_indeterminate  = -1
        denorm_absent         = 0
        denorm_present        = 1

   #The static methods can be called as, e.g. numeric_limits[int].round_error(), etc.
   #The const data members should be declared as static.  Cython currently doesn't allow that
   #and/or I can't figure it out, so you must instantiate an object to access, e.g.
   #cdef numeric_limits[double] lm
   #print lm.round_style
   cdef cppclass numeric_limits[T]:
    const bint is_specialized
    @staticmethod
    T min()
    @staticmethod
    T max()
    const int digits
    const int  digits10
    const bint is_signed
    const bint is_integer
    const bint is_exact
    const int radix
    @staticmethod
    T epsilon()
    @staticmethod
    T round_error()

    const int  min_exponent
    const int  min_exponent10
    const int  max_exponent
    const int  max_exponent10

    const bint has_infinity
    const bint has_quiet_NaN
    const bint has_signaling_NaN
    const float_denorm_style has_denorm
    const bint has_denorm_loss
    @staticmethod
    T infinity()
    @staticmethod
    T quiet_NaN()
    @staticmethod
    T signaling_NaN()
    @staticmethod
    T denorm_min()

    const bint is_iec559
    const bint is_bounded
    const bint is_modulo

    const bint traps
    const bint tinyness_before
    const float_round_style round_style