libretto/num
64-битное целое число (libretto/num/I64)
Структура libretto/num/I64 представляет 64-битное знаковое целое число. С ним возможно использование операций +, -, *, idiv.
use libretto/num
def main = {
fix i1 = num/i64(777)
fix i2 = num/i64(123)
println: i1 + i2
println: i2 - i1
println: i1 * i2
println: i1 idiv i2
}
Выдает:
900
-654
95571
6
При помощи метода libretto/num/i64 определяются литералы, аргумент должен быть литералом libretto/Int. Другие методы преобразования определены в пакете libretto/num:
def Int i64: I64
def I64 int: Int
Битовые операции с libretto/num/I64, определенные методами в пакете libretto/num:
def I64 and(v: I64): I64
def I64 or(v: I64): I64
def I64 xor(v: I64): I64
def I64 not: I64
def I64 `>>>`(v: I64): I64 // беззнаковый битовый сдвиг
def I64 `>>`(v: I64): I64 // знаковый битовый сдвиг
def I64 `<<`(v: I64): I64 //
Пример использования:
use libretto/num
def binary(v: num/I64) = {
fix one = num/i64(1)
var acc = v
var res: String = ""
0..63.${
res = (if (acc.and(one) == one) "1" else "0") + res
acc = acc.`>>>`(one)
}
println(res)
}
def main = {
fix minI64 = num/i64(-9_223_372_036_854_775_808)
fix maxI64 = num/i64(9_223_372_036_854_775_807)
fix one = num/i64(1)
binary(minI64)
binary(maxI64)
binary(one)
println()
binary(minI64.not)
binary(maxI64.not)
binary(one.not)
println()
binary(minI64.or(maxI64))
binary(minI64.and(maxI64))
binary(maxI64.and(one))
binary(maxI64.xor(one))
println()
binary(one.`<<`(num/i64(3)))
binary(minI64.`>>`(num/i64(3)))
binary(minI64.`>>>`(num/i64(3)))
}
Результат:
1000000000000000000000000000000000000000000000000000000000000000
0111111111111111111111111111111111111111111111111111111111111111
0000000000000000000000000000000000000000000000000000000000000001
0111111111111111111111111111111111111111111111111111111111111111
1000000000000000000000000000000000000000000000000000000000000000
1111111111111111111111111111111111111111111111111111111111111110
1111111111111111111111111111111111111111111111111111111111111111
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000001
0111111111111111111111111111111111111111111111111111111111111110
0000000000000000000000000000000000000000000000000000000000001000
1111000000000000000000000000000000000000000000000000000000000000
0001000000000000000000000000000000000000000000000000000000000000
64-битное вещественное число (libretto/num/R64)
Структура libretto/num/R64 представляет собой 64-битное знаковое вещественное число (IEEE 754). С ним возможно использование операций +, -, *, div
use libretto/num
def main = {
fix i1 = num/r64(7.77)
fix i2 = num/r64(1.23)
println: i1 + i2
println: i2 - i1
println: i1 * i2
println: i1 div i2
}
Выдает:
9.0
-6.539999999999999
9.5571
6.317073170731707
При помощи метода libretto/num/r64 определяются литералы, аргумент должен быть литералом libretto/Real. Другие методы преобразования определены в пакете `libretto/num:
def Real r64: R64
def Int r64: R64
def I64 r64: R64
def R64 real: Real
Операции с libretto/num/R64, определенные в пакете libretto/num:
def R64 sqrt: R64
def R64 log: R64
def R64 exp: R64
def R64 pow(p: R64): R64