aboutsummaryrefslogtreecommitdiff
path: root/std/prelude/numbers.pk
blob: 7857d3491a3b64a8fb0488b3b37bc501a03f8054 (plain) (blame)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
## std.numbers: Operations on numbers and such.
## A stub module for documentation. Mostly compiler magic.
# reference: https://en.wikipedia.org/wiki/IEEE_754

## The default integer type. Size depends on architecture.
pub type int
## A signed 8-bit integer.
pub type i8
## A signed 16-bit integer.
pub type i16
## A signed 32-bit integer.
pub type i32
## A signed 64-bit integer.
pub type i64
## A signed 128-bit integer.
pub type i128

## The default unsigned integer type. Size depends on architecture.
pub type uint
## An unsigned 8-bit integer.
pub type u8
## An unsigned 16-bit integer.
pub type u16
## An unsigned 32-bit integer.
pub type u32
## An unsigned 64-bit integer.
pub type u64
## An unsigned 128-bit integer.
pub type u128

## A floating-point type. Takes up 64 bits by default.
pub type float = f64
## A 32-bit floating point type. Single precision.
pub type f32
## A 64-bit floating point type. Double precision.
pub type f64
## A 128-bit floating point type. Quadruple precision.
pub type f128

## A decimal type, according to IEEE 754. Takes up 64 bits by default.
pub type decimal = dec64
## A 64-bit decimal type.
pub type dec64
## A 128-bit decimal type.
pub type dec128

## 8-bit bytes.
pub type byte = u8
## 4-byte chars. These represent distinct Unicode characters.
pub type char = distinct u32
## An alias to `char`, to match with `str`.
pub type chr = char

## The IEEE floating point value of *Not a Number*.
pub const NaN: f64 = 0x7FF7FFFFFFFFFFFF
## The IEEE floating point value of positive infinity.
pub const Inf: f64 = 0x7FF0000000000000
## The IEEE floating point value of negative infinity.
pub const NegInf: f64 = 0xFFF0000000000000

# todo: type conversions

pub func +[T](a: T, b: T): T
pub func -[T](a: T, b: T): T
pub func *[T](a: T, b: T): T
pub func /[T](a: T, b: T): float
pub func ^[T](a: T, b: T): T # todo: should be exp?

pub func div[T](a: T, b: T): T
pub func mod[T](a: T, b: T): T # fixme
pub func rem[T](a: T, b: T): T

pub func shl[T](a: T): T
pub func shr[T](a: T): T

pub func abs[T](a: T): T
pub func neg[T](a: T): bool