Числа
Стандартные числовые типы
Ниже показано дерево типов для всех подтипов Number
в Base
. Помечены абстрактные типы, остальные типы являются конкретными.
Number (Abstract Type) ├─ Complex └─ Real (Abstract Type) ├─ AbstractFloat (Abstract Type) │ ├─ Float16 │ ├─ Float32 │ ├─ Float64 │ └─ BigFloat ├─ Integer (Abstract Type) │ ├─ Bool │ ├─ Signed (Abstract Type) │ │ ├─ Int8 │ │ ├─ Int16 │ │ ├─ Int32 │ │ ├─ Int64 │ │ ├─ Int128 │ │ └─ BigInt │ └─ Unsigned (Abstract Type) │ ├─ UInt8 │ ├─ UInt16 │ ├─ UInt32 │ ├─ UInt64 │ └─ UInt128 ├─ Rational └─ AbstractIrrational (Abstract Type) └─ Irrational
Абстрактные числовые типы
#
Core.AbstractFloat
— Type
AbstractFloat <: Real
Абстрактный супертип для всех чисел с плавающей запятой.
#
Core.Unsigned
— Type
Unsigned <: Integer
Абстрактный супертип для всех целых чисел без знака.
Встроенные целые числа без знака выводятся в шестнадцатеричном формате с префиксом 0x
и могут вводиться таким же образом.
Примеры
julia> typemax(UInt8) 0xff julia> Int(0x00d) 13 julia> unsigned(true) 0x0000000000000001
#
Base.AbstractIrrational
— Type
AbstractIrrational <: Real
Числовой тип, представляющий точное иррациональное значение, которое автоматически округляется до корректной точности в арифметической операции с другими численными величинами.
Подтипы MyIrrational <: AbstractIrrational
должны реализовывать как минимум ==(::MyIrrational, ::MyIrrational)
, hash(x::MyIrrational, h::UInt)
и convert(::Type{F}, x::MyIrrational) where {F <: Union{BigFloat,Float32,Float64}}
.
Если подтип используется для представления значений, которые могут быть рациональными (например, тип квадратного корня, представляющий √n
для целых чисел n
, дает рациональный результат, если n
является полным квадратом), тогда он также должен реализовывать isinteger
, iszero
, isone
и ==
со значениями Real
(поскольку все эти значения по умолчанию равны false
для типов AbstractIrrational
), а также определять hash
равным значению соответствующего Rational
.
Конкретные числовые типы
#
Core.Float16
— Type
Float16 <: AbstractFloat <: Real
16-разрядный тип числа с плавающей запятой (стандарт IEEE 754). Двоичный формат: 1 бит знака, 5 бит экспоненты, 10 бит дробной части.
#
Core.Float32
— Type
Float32 <: AbstractFloat <: Real
32-разрядный тип числа с плавающей запятой (стандарт IEEE 754). Двоичный формат: 1 бит знака, 8 бит экспоненты, 23 бита дробной части.
Экспоненту для экспоненциального представления следует вводить через строчную букву f
, то есть 2f3 === 2.0f0 * 10^3 === Float32(2_000)
. Для литералов массивов и включений тип элементов можно указать перед квадратными скобками: Float32[1,4,9] == Float32[i^2 for i in 1:3]
.
#
Core.Float64
— Type
Float64 <: AbstractFloat <: Real
64-разрядный тип числа с плавающей запятой (стандарт IEEE 754). Двоичный формат: 1 бит знака, 11 битов экспоненты, 52 бита дробной части. Для доступа к различным битам используйте bitstring
, signbit
, exponent
, frexp
и significand
.
Используется по умолчанию для литералов с плавающей запятой, 1.0 isa Float64
, и для многих операций, таких как 1/2, 2pi, log(2), range(0,90,length=4)
. В отличие от целых чисел, это значение по умолчанию не меняется согласно Sys.WORD_SIZE
.
Экспоненту для экспоненциального представления можно вводить через e
или E
, то есть 2e3 === 2.0E3 === 2.0 * 10^3
. Это гораздо предпочтительнее, чем 10^n
, поскольку целые числа переполняются, поэтому 2.0 * 10^19 < 0
, но 2e19 > 0
.
#
Base.MPFR.BigFloat
— Type
BigFloat <: AbstractFloat
Тип числа с плавающей запятой с произвольной точностью.
#
Core.Bool
— Type
Bool <: Integer
Логический тип, содержащий значения true
и false
.
Bool
представляет собой вид числа: false
в числовом плане равен 0
, а true
— 1
. Кроме того, false
выступает как мультипликативный «сильный ноль» для NaN
и Inf
.
julia> [true, false] == [1, 0]
true
julia> 42.0 + true
43.0
julia> 0 .* (NaN, Inf, -Inf)
(NaN, NaN, NaN)
julia> false .* (NaN, Inf, -Inf)
(0.0, 0.0, -0.0)
Для ветвления посредством if
и других условных операторов принимается только Bool
. В Julia нет «истинных» значений.
Сравнения обычно возвращают Bool
, а транслируемые сравнения могут возвращать BitArray
вместо Array{Bool}
.
julia> [1 2 3 4 5] .< pi
1×5 BitMatrix:
1 1 1 0 0
julia> map(>(pi), [1 2 3 4 5])
1×5 Matrix{Bool}:
0 0 0 1 1
#
Core.UInt8
— Type
UInt8 <: Unsigned <: Integer
8-разрядный целочисленный тип без знака.
Выводится в шестнадцатеричном формате, то есть 0x07 == 7.
#
Core.UInt16
— Type
UInt16 <: Unsigned <: Integer
16-разрядный целочисленный тип без знака.
Выводится в шестнадцатеричном формате, то есть 0x000f == 15.
#
Core.UInt32
— Type
UInt32 <: Unsigned <: Integer
32-разрядный целочисленный тип без знака.
Выводится в шестнадцатеричном формате, то есть 0x0000001f == 31.
#
Core.UInt64
— Type
UInt64 <: Unsigned <: Integer
64-разрядный целочисленный тип без знака.
Выводится в шестнадцатеричном формате, то есть 0x000000000000003f == 63.
#
Core.UInt128
— Type
UInt128 <: Unsigned <: Integer
128-разрядный целочисленный тип без знака.
Выводится в шестнадцатеричном формате, то есть 0x0000000000000000000000000000007f == 127.
#
Core.Int
— Type
Int
Целочисленный тип со знаком размером Sys.WORD_SIZE разрядов, Int <: Signed <: Integer <: Real
.
Это тип по умолчанию для большинства целочисленных литералов и псевдоним для Int32
или Int64
в зависимости от Sys.WORD_SIZE
. Это тип, возвращаемый такими функциями, как length
, и стандартный тип для индексации массивов.
Обратите внимание, что целые числа переполняются без предупреждения, поэтому typemax(Int) + 1 < 0
и 10^19 < 0
. Переполнения можно избежать, используя BigInt
. Для очень больших целочисленных литералов будет использоваться более широкий тип, например 10_000_000_000_000_000_000 isa Int128
.
#
Core.UInt
— Type
UInt
Целочисленный тип без знака размером Sys.WORD_SIZE разрядов, UInt <: Unsigned <: Integer
.
Как и в случае с Int
, псевдоним UInt
может означать либо UInt32
, либо UInt64
в зависимости от значения Sys.WORD_SIZE
на данном компьютере.
Выводится и анализируется в шестнадцатеричном формате: UInt(15) === 0x000000000000000f
.
#
Base.Rational
— Type
Rational{T<:Integer} <: Real
Тип рационального числа с числителем и знаменателем типа T
. Рациональные числа проверяются на предмет переполнения.
#
Base.Irrational
— Type
Irrational{sym} <: AbstractIrrational
Числовой тип, представляющий точное иррациональное значение, обозначаемое символом sym
, таким как π
, ℯ
и γ
.
См. также описание AbstractIrrational
.
Форматы данных
#
Base.digits
— Function
digits([T<:Integer], n::Integer; base::T = 10, pad::Integer = 1)
Возвращает массив с типом элемента T
(по умолчанию Int
), содержащий цифры n
в заданной системе счисления, с необязательным заполнением нулями до указанного размера. Цифры большего порядка находятся по более высоким индексам, так что n == sum(digits[k]*base^(k-1) for k in eachindex(digits))
.
См. также описание ndigits
, digits!
, а для основания 2 — bitstring
, count_ones
.
Примеры
julia> digits(10)
2-element Vector{Int64}:
0
1
julia> digits(10, base = 2)
4-element Vector{Int64}:
0
1
0
1
julia> digits(-256, base = 10, pad = 5)
5-element Vector{Int64}:
-6
-5
-2
0
0
julia> n = rand(-999:999);
julia> n == evalpoly(13, digits(n, base = 13))
true
#
Base.digits!
— Function
digits!(array, n::Integer; base::Integer = 10)
Заполняет массив цифр n
в заданной системе счисления. Цифры большего порядка находятся по более высоким индексам. Если длина массива недостаточна, цифры меньшего порядка заполняются до достижения длины массива. Если массив имеет чрезмерную длину, избыточная часть заполняется нулями.
Примеры
julia> digits!([2, 2, 2, 2], 10, base = 2)
4-element Vector{Int64}:
0
1
0
1
julia> digits!([2, 2, 2, 2, 2, 2], 10, base = 2)
6-element Vector{Int64}:
0
1
0
1
0
0
#
Base.bitstring
— Function
bitstring(n)
Строка с литеральным битовым представлением примитивного типа.
См. также описание count_ones
, count_zeros
и digits
.
Примеры
julia> bitstring(Int32(4))
"00000000000000000000000000000100"
julia> bitstring(2.2)
"0100000000000001100110011001100110011001100110011001100110011010"
#
Base.parse
— Function
parse(::Type{SimpleColor}, rgb::String)
Аналог tryparse(SimpleColor, rgb::String)
, который выдает ошибку вместо возврата nothing
.
parse(::Type{Platform}, triplet::AbstractString)
Выполняет анализ строкового триплета платформы обратно в объект Platform
.
parse(type, str; base)
Выполняет анализ строки как числа. Для типов Integer
можно задать основание (по умолчанию используется значение 10). Для типов с плавающей запятой строка анализируется как десятичное число с плавающей запятой. Типы Complex
анализируются из десятичных строк вида "R±Iim"
как Complex(R,I)
запрашиваемого типа; "i"
или "j"
также можно использовать вместо "im"
. Кроме того, допускается "R"
или "Iim"
. Если строка не содержит допустимое число, возникает ошибка.
Совместимость: Julia 1.1
Для |
Примеры
julia> parse(Int, "1234")
1234
julia> parse(Int, "1234", base = 5)
194
julia> parse(Int, "afc", base = 16)
2812
julia> parse(Float64, "1.2e-3")
0.0012
julia> parse(Complex{Float64}, "3.2e-1 + 4.5im")
0.32 + 4.5im
#
Base.tryparse
— Function
tryparse(::Type{SimpleColor}, rgb::String)
Пытается проанализировать rgb
как SimpleColor
. Если значение rgb
начинается с #
и имеет длину 7, оно преобразуется в SimpleColor
на основе RGBTuple
. Если значение rgb
начинается с a
--z
, rgb
интерпретируется как название цвета и преобразуется в SimpleColor
на основе Symbol
.
В противном случае возвращается nothing
.
Примеры
julia> tryparse(SimpleColor, "blue")
SimpleColor(blue)
julia> tryparse(SimpleColor, "#9558b2")
SimpleColor(#9558b2)
julia> tryparse(SimpleColor, "#nocolor")
tryparse(type, str; base)
#
Base.signed
— Function
signed(T::Integer)
Преобразует целочисленный битовый тип в тип со знаком того же размера.
Примеры
julia> signed(UInt16)
Int16
julia> signed(UInt64)
Int64
signed(x)
Преобразует число в целое число со знаком. Если аргумент не имеет знака, он повторно интерпретируется как аргумент со знаком без проверки на переполнение.
#
Base.unsigned
— Function
unsigned(T::Integer)
Преобразует целочисленный битовый тип в тип без знака того же размера.
Примеры
julia> unsigned(Int16)
UInt16
julia> unsigned(UInt64)
UInt64
#
Base.Math.significand
— Function
significand(x)
Извлекает значащую цифру (мантиссу) числа с плавающей запятой. Если x
является ненулевым конечным числом, то результатом будет число того же типа и с тем же знаком (что и у x
), абсолютное значение которого находится в интервале . В противном случае возвращается x
.
Примеры
julia> significand(15.2)
1.9
julia> significand(-15.2)
-1.9
julia> significand(-15.2) * 2^3
-15.2
julia> significand(-Inf), significand(Inf), significand(NaN)
(-Inf, Inf, NaN)
#
Base.Math.exponent
— Function
exponent(x::Real) -> Int
Возвращает наибольшее целое число y
такое, что 2^y ≤ abs(x)
.
Выдает DomainError
, когда x
равно нулю, бесконечности или NaN
. Для любого другого не субнормального числа с плавающей запятой x
это соответствует битам экспоненты x
.
См. также описание signbit
, significand
, frexp
, issubnormal
, log2
, ldexp
.
Примеры
julia> exponent(8)
3
julia> exponent(6.5)
2
julia> exponent(-1//4)
-2
julia> exponent(3.142e-4)
-12
julia> exponent(floatmin(Float32)), exponent(nextfloat(0.0f0))
(-126, -149)
julia> exponent(0.0)
ERROR: DomainError with 0.0:
Cannot be ±0.0.
[...]
#
Base.complex
— Method
complex(r, [i])
Преобразует вещественные числа или массива в комплексные числа. i
по умолчанию равно нулю.
Примеры
julia> complex(7)
7 + 0im
julia> complex([1, 2, 3])
3-element Vector{Complex{Int64}}:
1 + 0im
2 + 0im
3 + 0im
#
Base.bswap
— Function
bswap(n)
Обращает порядок байтов в n
.
(См. также описание функций ntoh
и hton
, которые выполняют преобразование между текущим собственным и обратным порядком байтов.)
Примеры
julia> a = bswap(0x10203040)
0x40302010
julia> bswap(a)
0x10203040
julia> string(1, base = 2)
"1"
julia> string(bswap(1), base = 2)
"100000000000000000000000000000000000000000000000000000000"
#
Base.hex2bytes
— Function
hex2bytes(itr)
При итерируемом itr
кодов ASCII для последовательности шестнадцатеричных цифр возвращает Vector{UInt8}
байт, соответствующих двоичному представлению: каждая последующая пара шестнадцатеричных цифр в itr
дает значение величиной в один байт в возвращаемом векторе.
Длина itr
должна быть точной, а возвращаемый массив имеет длину вполовину меньше длины itr
. См. также hex2bytes!
, где приведено описание встроенной версии, и bytes2hex
, где дано описание инверсии.
Совместимость: Julia 1.7
Для вызова |
Примеры
julia> s = string(12345, base = 16)
"3039"
julia> hex2bytes(s)
2-element Vector{UInt8}:
0x30
0x39
julia> a = b"01abEF"
6-element Base.CodeUnits{UInt8, String}:
0x30
0x31
0x61
0x62
0x45
0x46
julia> hex2bytes(a)
3-element Vector{UInt8}:
0x01
0xab
0xef
#
Base.hex2bytes!
— Function
hex2bytes!(dest::AbstractVector{UInt8}, itr)
Преобразует итерируемый объект itr
, который содержит байты, представляющие шестнадцатеричную строку, в двоичное представление (аналогично hex2bytes
за исключением того, что вывод записывается в dest
на месте). Длина dest
должна быть вполовину меньше длины itr
.
Совместимость: Julia 1.7
Для вызова hex2bytes! с итераторами, производящими UInt8, требуется версия 1.7. В более ранних версиях можно вместо этого собрать итерируемый объект перед вызовом. |
#
Base.bytes2hex
— Function
bytes2hex(itr) -> String
bytes2hex(io::IO, itr)
Преобразует итератор itr
байтов в его шестнадцатеричное строковое представление путем, возвращая String
посредством bytes2hex(itr)
или записывая строку в поток io
посредством bytes2hex(io, itr)
. Шестнадцатеричные символы приведены в нижнем регистре.
Совместимость: Julia 1.7
Для вызова |
Примеры
julia> a = string(12345, base = 16)
"3039"
julia> b = hex2bytes(a)
2-element Vector{UInt8}:
0x30
0x39
julia> bytes2hex(b)
"3039"
Общие числовые функции и константы
#
Base.one
— Function
one(x)
one(T::type)
Возвращает единичный элемент умножения для x
: такое значение, что one(x)*x == x*one(x) == x
. one(T)
может также принимать тип T
; в этом случае one
возвращает единичный элемент умножения для любого x
типа T
.
При возможности one(x)
возвращает значение того же типа, что и x
, а one(T)
возвращает значение типа T
. Однако для типов, представляющих размерные величины (например, период в днях), ситуация может отличаться, поскольку единичный элемент умножения должен быть безразмерным. В этом случаевызов one(x)
должен возвращать значение единичного элемента с той же точностью (и той же формы для матриц), что и x
.
Если требуется величина того же типа, что и x
, или типа T
, даже если x
является размерным, вместо этого используйте oneunit
.
См. также описание функции identity
и I
в LinearAlgebra
для матрицы тождественности.
Примеры
julia> one(3.7)
1.0
julia> one(Int)
1
julia> import Dates; one(Dates.Day(1))
1
#
Base.oneunit
— Function
oneunit(x::T)
oneunit(T::Type)
Возвращает T(one(x))
, где T
является типом аргумента или (если передается тип) аргументом. Это отличается от one
для размерных величин: one
является безразмерным (единичный элемент умножения), хотя oneunit
является размерным (того же типа, что и x
, или относится к типу T
).
Примеры
julia> oneunit(3.7)
1.0
julia> import Dates; oneunit(Dates.Day)
1 day
#
Base.zero
— Function
zero(x)
zero(::Type)
Возвращает нулевой элемент по операции сложения для типа x
(x
также может указывать непосредственно тип).
Примеры
julia> zero(1)
0
julia> zero(big"2.0")
0.0
julia> zero(rand(2,2))
2×2 Matrix{Float64}:
0.0 0.0
0.0 0.0
#
Base.MathConstants.catalan
— Constant
catalan
Постоянная Каталана.
Примеры
julia> Base.MathConstants.catalan
catalan = 0.9159655941772...
julia> sum(log(x)/(1+x^2) for x in 1:0.01:10^6) * 0.01
0.9159466120554123
#
Base.MathConstants.eulergamma
— Constant
γ
eulergamma
Постоянная Эйлера.
Примеры
julia> Base.MathConstants.eulergamma
γ = 0.5772156649015...
julia> dx = 10^-6;
julia> sum(-exp(-x) * log(x) for x in dx:dx:100) * dx
0.5772078382499133
#
Base.MathConstants.golden
— Constant
φ
golden
Золотое сечение.
Примеры
julia> Base.MathConstants.golden
φ = 1.6180339887498...
julia> (2ans - 1)^2 ≈ 5
true
#
Base.NaN
— Constant
NaN, NaN64
Значение «не число» типа Float64
.
Примеры
julia> 0/0
NaN
julia> Inf - Inf
NaN
julia> NaN == NaN, isequal(NaN, NaN), isnan(NaN)
(false, true, true)
julia> reinterpret(UInt32, NaN32)
0x7fc00000
julia> NaN32p1 = reinterpret(Float32, 0x7fc00001)
NaN32
julia> NaN32p1 === NaN32, isequal(NaN32p1, NaN32), isnan(NaN32p1)
(false, true, true)
#
Base.NaN64
— Constant
NaN, NaN64
Значение «не число» типа Float64
.
Примеры
julia> 0/0
NaN
julia> Inf - Inf
NaN
julia> NaN == NaN, isequal(NaN, NaN), isnan(NaN)
(false, true, true)
julia> reinterpret(UInt32, NaN32)
0x7fc00000
julia> NaN32p1 = reinterpret(Float32, 0x7fc00001)
NaN32
julia> NaN32p1 === NaN32, isequal(NaN32p1, NaN32), isnan(NaN32p1)
(false, true, true)
#
Base.issubnormal
— Function
issubnormal(f) -> Bool
Проверяет, является ли число с плавающей запятой поднормальным.
Число с плавающей запятой IEEE является поднормальным, когда биты экспоненты равны нулю и его значащее число не равно нулю.
Примеры
julia> floatmin(Float32)
1.1754944f-38
julia> issubnormal(1.0f-37)
false
julia> issubnormal(1.0f-38)
true
#
Base.isfinite
— Function
isfinite(f) -> Bool
Проверяет, является ли число конечным.
Примеры
julia> isfinite(5)
true
julia> isfinite(NaN32)
false
#
Base.iszero
— Function
iszero(x)
Возвращает true
, если x == zero(x)
; если x
является массивом, выполняется проверка того, являются ли все элементы x
нулями.
Примеры
julia> iszero(0.0)
true
julia> iszero([1, 9, 0])
false
julia> iszero([false, 0, 0])
true
#
Base.isone
— Function
isone(x)
Возвращает true
, если x == one(x)
; если x
является массивом, выполняется проверка того, является ли x
матрицей тождественности.
Примеры
julia> isone(1.0)
true
julia> isone([1 0; 0 2])
false
julia> isone([1 0; 0 true])
true
#
Base.nextfloat
— Function
nextfloat(x::AbstractFloat, n::Integer)
Результат n
итеративных применений nextfloat
к x
, если n >= 0
, или -n
применений prevfloat
, если n < 0
.
nextfloat(x::AbstractFloat)
Возвращает наименьшее число с плавающей запятой y
того же типа, что и x
, например x < y
. Если такого y
не существует (например, если x
является Inf
или NaN
), возвращается x
.
См. также описание prevfloat
, eps
, issubnormal
.
#
Base.prevfloat
— Function
prevfloat(x::AbstractFloat, n::Integer)
Результат n
итеративных применений prevfloat
к x
, если n >= 0
, или -n
применений nextfloat
, если n < 0
.
prevfloat(x::AbstractFloat)
Возвращает наибольшее число с плавающей запятой y
того же типа, что и x
, например y < x
. Если такого y
не существует (например, если x
является -Inf
или NaN
), возвращается x
.
#
Base.isinteger
— Function
isinteger(x) -> Bool
Проверяет, является ли x
численно равным целому числу.
Примеры
julia> isinteger(4.0)
true
#
Base.isreal
— Function
isreal(x) -> Bool
Проверяет, являются ли x
или все его элементы равными в числовом плане некоторым вещественным числам, включая бесконечности и типы «не число». isreal(x)
равно true, если isequal(x, real(x))
равно true.
Примеры
julia> isreal(5.)
true
julia> isreal(1 - 3im)
false
julia> isreal(Inf + 0im)
true
julia> isreal([4.; complex(0,1)])
false
#
Core.Float32
— Method
Float32(x [, mode::RoundingMode])
Создает Float32
на основе x
. Если x
не является точно представимым, то mode
определяет способ округления x
.
Примеры
julia> Float32(1/3, RoundDown)
0.3333333f0
julia> Float32(1/3, RoundUp)
0.33333334f0
Доступные режимы округления см. в описании RoundingMode
.
#
Core.Float64
— Method
Float64(x [, mode::RoundingMode])
Создает Float64
на основе x
. Если x
не является точно представимым, то mode
определяет способ округления x
.
Примеры
julia> Float64(pi, RoundDown)
3.141592653589793
julia> Float64(pi, RoundUp)
3.1415926535897936
Доступные режимы округления см. в описании RoundingMode
.
#
Base.Rounding.setrounding
— Method
setrounding(T, mode)
Задает режим округления типа с плавающей запятой T
, который контролирует округление базовых арифметических функций (+
, -
, *
, /
и sqrt
) и преобразование типов. Остальные числовые функции могут давать некорректные или недопустимые значения, если используются режимы округления, отличные от режима по умолчанию RoundNearest
.
Обратите внимание, что эта функция поддерживается только для T == BigFloat
.
Эта функция не является потокобезопасной. Она влияет на код, выполняемый во всех потоках, однако ее поведение не определено, если она вызывается одновременно с вычислениями, использующими параметр. |
#
Base.Rounding.setrounding
— Method
setrounding(f::Function, T, mode)
Изменяет режим округления типа с плавающей запятой T
на время выполнения функции f
. Логически эквивалентна следующему:
old = rounding(T) setrounding(T, mode) f() setrounding(T, old)
Доступные режимы округления см. в описании RoundingMode
.
#
Base.Rounding.get_zero_subnormals
— Function
get_zero_subnormals() -> Bool
Возвращает false
, если операции с поднормальными («денормализованными») значениями с плавающей запятой подчиняются правилам арифметики IEEE, или true
, если их можно преобразовать в нули.
Эта функция влияет только на текущий поток. |
#
Base.Rounding.set_zero_subnormals
— Function
set_zero_subnormals(yes::Bool) -> Bool
Если yes
равно false
, последовательные операции с плавающей запятой следуют правилам арифметики IEEE в отношении поднормальных («денормализованных») значений. В противном случае операциям с плавающей запятой разрешено (но не требуется) преобразовывать поднормальные входные или выходные значения в нули. Возвращает true
, если не выполняется условие yes==true
, но оборудование не поддерживает обнуление поднормальных чисел.
set_zero_subnormals(true)
может ускорять вычисления на некотором оборудовании. Однако эта функция может нарушать тождества, такие как (x-y==0) == (x==y)
.
Эта функция влияет только на текущий поток. |
Целые числа
#
Base.count_ones
— Function
count_ones(x::Integer) -> Integer
Количество единиц в двоичном представлении x
.
Примеры
julia> count_ones(7)
3
julia> count_ones(Int32(-1))
32
#
Base.count_zeros
— Function
count_zeros(x::Integer) -> Integer
Количество нулей в двоичном представлении x
.
Примеры
julia> count_zeros(Int32(2 ^ 16 - 1))
16
julia> count_zeros(-1)
0
#
Base.leading_zeros
— Function
leading_zeros(x::Integer) -> Integer
Количество начальных нулей в двоичном представлении x
.
Примеры
julia> leading_zeros(Int32(1))
31
#
Base.leading_ones
— Function
leading_ones(x::Integer) -> Integer
Количество начальных единиц в двоичном представлении x
.
Примеры
julia> leading_ones(UInt32(2 ^ 32 - 2))
31
#
Base.trailing_zeros
— Function
trailing_zeros(x::Integer) -> Integer
Количество конечных нулей в двоичном представлении x
.
Примеры
julia> trailing_zeros(2)
1
#
Base.trailing_ones
— Function
trailing_ones(x::Integer) -> Integer
Количество конечных единиц в двоичном представлении x
.
Примеры
julia> trailing_ones(3)
2
#
Base.isodd
— Function
isodd(x::Number) -> Bool
Возвращает true
, если x
является нечетным целым числом (то есть целым числом, которое не делится на 2), или false
в противном случае.
Совместимость: Julia 1.7
Для аргументов, отличных от |
Примеры
julia> isodd(9)
true
julia> isodd(10)
false
#
Base.iseven
— Function
iseven(x::Number) -> Bool
Возвращает true
, если x
является четным целым числом (то есть целым числом, которое делится на 2), или false
в противном случае.
Совместимость: Julia 1.7
Для аргументов, отличных от |
Примеры
julia> iseven(9)
false
julia> iseven(10)
true
#
Core.@int128_str
— Macro
@int128_str str
Анализирует str
как Int128
. Выдает ArgumentError
, если строка не является допустимым целым числом.
Примеры
julia> int128"123456789123"
123456789123
julia> int128"123456789123.4"
ERROR: LoadError: ArgumentError: invalid base 10 digit '.' in "123456789123.4"
[...]
#
Core.@uint128_str
— Macro
@uint128_str str
Анализирует str
как UInt128
. Выдает ArgumentError
, если строка не является допустимым целым числом.
Примеры
julia> uint128"123456789123" 0x00000000000000000000001cbe991a83 julia> uint128"-123456789123" ERROR: LoadError: ArgumentError: invalid base 10 digit '-' in "-123456789123" [...]
Числовые типы BigFloats и BigInts
Типы BigFloat
и BigInt
реализуют арифметику с плавающей запятой произвольной точности и целочисленную арифметику, соответственно. Для BigFloat
используется библиотека GNU MPFR, а для BigInt
— библиотека арифметики множественной точности GNU (GMP).
#
Base.MPFR.BigFloat
— Method
BigFloat(x::Union{Real, AbstractString} [, rounding::RoundingMode=rounding(BigFloat)]; [precision::Integer=precision(BigFloat)])
Создает число с плавающей запятой с произвольной точностью на основе x
с точностью precision
. Аргумент rounding
указывает направление округления результата, если преобразование нельзя выполнить точно. Если он не задан, действуют текущие глобальные значения.
BigFloat(x::Real)
— это то же самое, что и convert(BigFloat,x)
, за исключением случаев, когда x
уже является BigFloat
. В этом случае возвращается значение с точностью, равной текущей глобальной точности; convert
всегда возвращает x
.
BigFloat(x::AbstractString)
идентично parse
. Эта функция предоставляется для удобства, так как десятичные литералы преобразуются во Float64
при анализе, поэтому BigFloat(2.1)
может не выдавать ожидаемый результат.
См. также описание
-
rounding
andsetrounding
Совместимость: Julia 1.1
Для именованного аргумента |
Примеры
julia> BigFloat(2.1) # 2.1 здесь является Float64
2.100000000000000088817841970012523233890533447265625
julia> BigFloat("2.1") # самый близкий BigFloat для 2.1
2.099999999999999999999999999999999999999999999999999999999999999999999999999986
julia> BigFloat("2.1", RoundUp)
2.100000000000000000000000000000000000000000000000000000000000000000000000000021
julia> BigFloat("2.1", RoundUp, precision=128)
2.100000000000000000000000000000000000007
#
Base.precision
— Function
precision(num::AbstractFloat; base::Integer=2)
precision(T::Type; base::Integer=2)
Получает точность для числа с плавающей запятой, определяемую по количеству битов в значащей части числа, или точность типа с плавающей запятой T
(текущее значение по умолчанию для него, если T
является типом с переменной точностью, например BigFloat
).
Если задано base
, возвращается максимальное соответствующее число цифр в значащей части числа по этому основанию.
Совместимость: Julia 1.8
Для именованного аргумента |
#
Base.MPFR.setprecision
— Function
setprecision([T=BigFloat,] precision::Int; base=2)
Задает точность (в битах, по умолчанию), используемую для арифметических операций с T
. Если задано base
, точность будет минимальной необходимой для выдачи не менее precision
цифр по данному base
.
Эта функция не является потокобезопасной. Она влияет на код, выполняемый во всех потоках, однако ее поведение не определено, если она вызывается одновременно с вычислениями, использующими параметр. |
Совместимость: Julia 1.8
Для именованного аргумента |
setprecision(f::Function, [T=BigFloat,] precision::Integer; base=2)
Изменяет арифметическую точность T
(в данном base
) на время выполнения функции f
. Логически эквивалентна следующему:
old = precision(BigFloat) setprecision(BigFloat, precision) f() setprecision(BigFloat, old)
Зачастую используется как setprecision(T, precision) do ... end
Примечание. nextfloat()
, prevfloat()
не используют точность, указанную в setprecision
.
Совместимость: Julia 1.8
Для именованного аргумента |
#
Base.GMP.BigInt
— Method
BigInt(x)
Создает целое число с произвольной точностью. x
может быть Int
(или чем угодно, что можно преобразовать в Int
). Обычные математические операторы определены для этого типа, и результаты продвигаются до BigInt
.
Экземпляры можно создавать на основе строк посредством parse
или с помощью строкового литерала big
.
Примеры
julia> parse(BigInt, "42")
42
julia> big"313"
313
julia> BigInt(10)^19
10000000000000000000
#
Core.@big_str
— Macro
@big_str str
Анализирует строку и преобразует ее в BigInt
или BigFloat
; если строка не является допустимым целым числом, выдает ArgumentError
. Для целых чисел в строке допускается разделитель _
.
Примеры
julia> big"123_456"
123456
julia> big"7891.5"
7891.5
julia> big"_"
ERROR: ArgumentError: invalid number format _ for BigInt or BigFloat
[...]
При использовании |