数字
标准数值类型
下面显示了 Base
中所有 Number
子类型的类型树。抽象类型已标记,其余为具体类型。
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.Number
— 类型Number
所有数字类型抽象的超类型。
Core.Real
— 类型Real <: Number
所有实数的抽象超类型。
Core.AbstractFloat
— 类型AbstractFloat <: Real
所有浮点数的抽象超类型。
Core.Integer
— 类型Integer <: Real
所有整数的抽象超类型。
Core.Signed
— 类型Signed <: Integer
所有带符号整数的抽象超类型。
Core.Unsigned
— 类型Unsigned <: Integer
所有无符号整数的抽象超类型。
Base.AbstractIrrational
— 类型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
值(因为所有这些对于 AbstractIrrational
类型默认为 false
),以及定义 hash
等于相应的 Rational
。
具体数字类型
Core.Float16
— 类型Float16 <: AbstractFloat
16 位浮点数类型(IEEE 754 标准)。
二进制格式:1 位符号位、5 位指数位、10 位尾数位。
Core.Float32
— 类型Float32 <: AbstractFloat
32 位浮点数类型(IEEE 754 标准)。
二进制格式:1 位符号位、8 位指数位、23 位尾数位。
Core.Float64
— 类型Float64 <: AbstractFloat
64 位浮点数类型(IEEE 754 标准)。
二进制格式:1 位符号位、11 位指数位、52 位尾数位。
Base.MPFR.BigFloat
— 类型BigFloat <: AbstractFloat
任意精度浮点数类型。
Core.Bool
— 类型Bool <: Integer
布尔类型,包含值 true
和 false
。
Bool
是一种数字:false
在数值上等于 0
,而 true
在数值上等于 1
。此外,false
充当乘法“强零”。
julia> false == 0
true
julia> true == 1
true
julia> 0 * NaN
NaN
julia> false * NaN
0.0
Core.Int8
— 类型Int8 <: Signed
8 位带符号整数类型。
Core.UInt8
— 类型UInt8 <: Unsigned
8 位无符号整数类型。
Core.Int16
— 类型Int16 <: Signed
16 位带符号整数类型。
Core.UInt16
— 类型UInt16 <: Unsigned
16 位无符号整数类型。
Core.Int32
— 类型Int32 <: Signed
32 位带符号整数类型。
Core.UInt32
— 类型UInt32 <: Unsigned
32 位无符号整数类型。
Core.Int64
— 类型Int64 <: Signed
64 位带符号整数类型。
Core.UInt64
— 类型UInt64 <: Unsigned
64 位无符号整数类型。
Core.Int128
— 类型Int128 <: Signed
128 位带符号整数类型。
Core.UInt128
— 类型UInt128 <: Unsigned
128 位无符号整数类型。
Base.GMP.BigInt
— 类型BigInt <: Signed
任意精度整数类型。
Base.Complex
— 类型Complex{T<:Real} <: Number
复数类型,其实部和虚部为类型 T
。
ComplexF16
、ComplexF32
和 ComplexF64
分别是 Complex{Float16}
、Complex{Float32}
和 Complex{Float64}
的别名。
Base.Rational
— 类型Rational{T<:Integer} <: Real
有理数类型,分子和分母为类型 T
。有理数会检查溢出。
Base.Irrational
— 类型数据格式
Base.digits
— 函数digits([T<:Integer], n::Integer; base::T = 10, pad::Integer = 1)
返回一个元素类型为 T
(默认为 Int
)的数组,表示 n
在给定基数下的数字,可以选择用零填充到指定的大小。更重要的数字位于较高的索引处,使得 n == sum(digits[k]*base^(k-1) for k=1:length(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!
— 函数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
— 函数bitstring(n)
一个字符串,给出原始类型的字面比特表示。
另请参阅 count_ones
、count_zeros
、digits
。
示例
julia> bitstring(Int32(4))
"00000000000000000000000000000100"
julia> bitstring(2.2)
"0100000000000001100110011001100110011001100110011001100110011010"
Base.parse
— 函数parse(::Type{Platform}, triplet::AbstractString)
将字符串平台三元组解析回 Platform
对象。
parse(type, str; base)
将字符串解析为数字。对于 Integer
类型,可以指定基数(默认为 10)。对于浮点类型,字符串被解析为十进制浮点数。Complex
类型从形式为 "R±Iim"
的十进制字符串解析为请求类型的 Complex(R,I)
;也可以使用 "i"
或 "j"
代替 "im"
,并且也允许 "R"
或 "Iim"
。如果字符串不包含有效的数字,则会引发错误。
parse(Bool, str)
需要 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
— 函数Base.big
— 函数Base.signed
— 函数signed(T::Integer)
将整数位类型转换为相同大小的有符号类型。
示例
julia> signed(UInt16)
Int16
julia> signed(UInt64)
Int64
Base.unsigned
— 函数unsigned(T::Integer)
将整数位类型转换为相同大小的无符号类型。
示例
julia> unsigned(Int16)
UInt16
julia> unsigned(UInt64)
UInt64
Base.float
— 方法float(x)
将数字或数组转换为浮点数据类型。
示例
julia> float(1:1000)
1.0:1.0:1000.0
julia> float(typemax(Int32))
2.147483647e9
Base.Math.significand
— 函数significand(x)
提取浮点数的有效数字(也称为尾数)。如果 x
是一个非零有限数,则结果将是一个与 x
具有相同类型和符号的数字,并且其绝对值在区间 $[1,2)$ 上。否则返回 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
— 函数exponent(x) -> Int
返回最大的整数 y
,使得 2^y ≤ abs(x)
。对于归一化的浮点数 x
,这对应于 x
的指数。
示例
julia> exponent(8)
3
julia> exponent(64//1)
6
julia> exponent(6.5)
2
julia> exponent(16.0)
4
julia> exponent(3.142e-4)
-12
Base.complex
— 方法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
— 函数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
— 函数hex2bytes(itr)
给定一个十六进制数字序列的 ASCII 代码的可迭代对象 itr
,返回一个 Vector{UInt8}
的字节,对应于二进制表示:itr
中每对连续的十六进制数字给出返回向量中一个字节的值。
itr
的长度必须为偶数,返回的数组的长度为 itr
的一半。另请参阅 hex2bytes!
以获取就地版本,以及 bytes2hex
以获取反函数。
使用生成 UInt8
值的迭代器调用 hex2bytes
需要 Julia 1.7 或更高版本。在早期版本中,您可以在调用 hex2bytes
之前 collect
迭代器。
示例
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!
— 函数hex2bytes!(dest::AbstractVector{UInt8}, itr)
将表示十六进制字符串的字节的可迭代对象 itr
转换为其二进制表示,类似于 hex2bytes
,但输出就地写入 dest
。dest
的长度必须是 itr
长度的一半。
使用生成 UInt8 的迭代器调用 hex2bytes! 需要版本 1.7。在早期版本中,您可以先收集可迭代对象,然后再调用。
Base.bytes2hex
— 函数bytes2hex(itr) -> String
bytes2hex(io::IO, itr)
将字节的迭代器 itr
转换为其十六进制字符串表示形式,或者通过 bytes2hex(itr)
返回 String
,或者通过 bytes2hex(io, itr)
将字符串写入 io
流。十六进制字符均为小写。
使用生成 UInt8
值的任意迭代器调用 bytes2hex
需要 Julia 1.7 或更高版本。在早期版本中,您可以在调用 bytes2hex
之前 collect
迭代器。
示例
julia> a = string(12345, base = 16)
"3039"
julia> b = hex2bytes(a)
2-element Vector{UInt8}:
0x30
0x39
julia> bytes2hex(b)
"3039"
通用数字函数和常量
Base.one
— 函数one(x)
one(T::type)
返回 x
的乘法单位元:一个值,使得 one(x)*x == x*one(x) == x
。或者 one(T)
可以接受类型 T
,在这种情况下,one
返回任何类型为 T
的 x
的乘法单位元。
如果可能,one(x)
返回与 x
类型相同的数值,one(T)
返回类型为 T
的数值。但是,对于表示有量纲量的类型(例如以天为单位的时间),可能并非如此,因为乘法单位元必须是无量纲的。在这种情况下,one(x)
应返回与 x
具有相同精度(以及矩阵的形状)的单位元值。
如果您想要一个与 x
类型相同或类型为 T
的量,即使 x
是有量纲的,请改用 oneunit
。
另请参阅 identity
函数,以及 LinearAlgebra
中的 I
以获取单位矩阵。
示例
julia> one(3.7)
1.0
julia> one(Int)
1
julia> import Dates; one(Dates.Day(1))
1
Base.oneunit
— 函数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
— 函数zero(x)
zero(::Type)
获取 x
类型(x
也可以指定类型本身)的加法单位元。
另请参阅 iszero
、one
、oneunit
、oftype
。
示例
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.im
— 常量Base.MathConstants.pi
— 常量π
pi
常数 pi。
在 Julia REPL 和许多编辑器中,可以通过键入 \pi
然后按 Tab 键入 Unicode π
。
示例
julia> pi
π = 3.1415926535897...
julia> 1/2pi
0.15915494309189535
Base.MathConstants.ℯ
— 常量ℯ
e
常数 ℯ。
在 Julia REPL 和许多编辑器中,可以通过键入 \euler
然后按 Tab 键入 Unicode ℯ
。
示例
julia> ℯ
ℯ = 2.7182818284590...
julia> log(ℯ)
1
julia> ℯ^(im)π ≈ -1
true
Base.MathConstants.catalan
— 常量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
— 常量γ
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
— 常量φ
golden
黄金分割率。
示例
julia> Base.MathConstants.golden
φ = 1.6180339887498...
julia> (2ans - 1)^2 ≈ 5
true
Base.Inf
— 常量Inf, Inf64
类型为 Float64
的正无穷大。
另请参阅:isfinite
、typemax
、NaN
、Inf32
。
示例
julia> π/0
Inf
julia> +1.0 / -0.0
-Inf
julia> ℯ^-Inf
0.0
Base.Inf64
— 常量Inf, Inf64
类型为 Float64
的正无穷大。
另请参阅:isfinite
、typemax
、NaN
、Inf32
。
示例
julia> π/0
Inf
julia> +1.0 / -0.0
-Inf
julia> ℯ^-Inf
0.0
Base.Inf32
— 常量Inf32
类型为 Float32
的正无穷大。
Base.Inf16
— 常量Inf16
类型为 Float16
的正无穷大。
Base.NaN
— 常量NaN, NaN64
类型为 Float64
的非数字值。
示例
julia> 0/0
NaN
julia> Inf - Inf
NaN
julia> NaN == NaN, isequal(NaN, NaN), NaN === NaN
(false, true, true)
Base.NaN64
— 常量NaN, NaN64
类型为 Float64
的非数字值。
示例
julia> 0/0
NaN
julia> Inf - Inf
NaN
julia> NaN == NaN, isequal(NaN, NaN), NaN === NaN
(false, true, true)
Base.NaN32
— 常量NaN32
类型为 Float32
的非数字值。
Base.NaN16
— 常量NaN16
类型为 Float16
的非数字值。
Base.issubnormal
— 函数issubnormal(f) -> Bool
测试浮点数是否为非规格化数。
当 IEEE 浮点数的指数位为零且有效数字不为零时,它就是 非规格化数。
示例
julia> floatmin(Float32)
1.1754944f-38
julia> issubnormal(1.0f-37)
false
julia> issubnormal(1.0f-38)
true
Base.isfinite
— 函数isfinite(f) -> Bool
测试数字是否为有限数。
示例
julia> isfinite(5)
true
julia> isfinite(NaN32)
false
Base.isinf
— 函数Base.isnan
— 函数Base.iszero
— 函数iszero(x)
如果 x == zero(x)
,则返回 true
;如果 x
是一个数组,则检查 x
的所有元素是否都为零。
另请参阅:isone
、isinteger
、isfinite
、isnan
。
示例
julia> iszero(0.0)
true
julia> iszero([1, 9, 0])
false
julia> iszero([false, 0, 0])
true
Base.isone
— 函数isone(x)
如果 x == one(x)
,则返回 true
;如果 x
是一个数组,则检查 x
是否为单位矩阵。
示例
julia> isone(1.0)
true
julia> isone([1 0; 0 2])
false
julia> isone([1 0; 0 true])
true
Base.nextfloat
— 函数nextfloat(x::AbstractFloat, n::Integer)
如果 n >= 0
,则表示对 x
应用 nextfloat
函数 n
次的结果;如果 n < 0
,则表示对 x
应用 prevfloat
函数 -n
次的结果。
nextfloat(x::AbstractFloat)
返回与 x
类型相同的最小浮点数 y
,使得 x < y
。如果不存在这样的 y
(例如,如果 x
为 Inf
或 NaN
),则返回 x
。
另请参阅:prevfloat
、eps
、issubnormal
。
Base.prevfloat
— 函数prevfloat(x::AbstractFloat, n::Integer)
如果 n >= 0
,则表示对 x
应用 prevfloat
函数 n
次的结果;如果 n < 0
,则表示对 x
应用 nextfloat
函数 -n
次的结果。
prevfloat(x::AbstractFloat)
返回与 x
类型相同的最大浮点数 y
,使得 y < x
。如果不存在这样的 y
(例如,如果 x
为 -Inf
或 NaN
),则返回 x
。
Base.isinteger
— 函数isinteger(x) -> Bool
测试 x
是否在数值上等于某个整数。
示例
julia> isinteger(4.0)
true
Base.isreal
— 函数isreal(x) -> Bool
测试 x
或其所有元素是否在数值上等于某个实数,包括无穷大和 NaN。如果 isequal(x, real(x))
为真,则 isreal(x)
为真。
示例
julia> isreal(5.)
true
julia> isreal(1 - 3im)
false
julia> isreal(Inf + 0im)
true
julia> isreal([4.; complex(0,1)])
false
Core.Float32
— 方法Float32(x [, mode::RoundingMode])
从 x
创建一个 Float32
。如果 x
不能精确表示,则 mode
决定如何对 x
进行舍入。
示例
julia> Float32(1/3, RoundDown)
0.3333333f0
julia> Float32(1/3, RoundUp)
0.33333334f0
有关可用的舍入模式,请参见 RoundingMode
。
Core.Float64
— 方法Float64(x [, mode::RoundingMode])
从 x
创建一个 Float64
。如果 x
不能精确表示,则 mode
决定如何对 x
进行舍入。
示例
julia> Float64(pi, RoundDown)
3.141592653589793
julia> Float64(pi, RoundUp)
3.1415926535897936
有关可用的舍入模式,请参见 RoundingMode
。
Base.Rounding.rounding
— 函数Base.Rounding.setrounding
— 方法setrounding(T, mode)
设置浮点类型 T
的舍入模式,控制基本算术函数(+
、-
、*
、/
和 sqrt
)和类型转换的舍入。在使用默认 RoundNearest
以外的舍入模式时,其他数值函数可能会给出不正确或无效的值。
请注意,这目前仅支持 T == BigFloat
。
此函数不是线程安全的。它会影响所有线程上运行的代码,但如果与使用该设置的计算同时调用,则其行为未定义。
Base.Rounding.setrounding
— 方法setrounding(f::Function, T, mode)
在 f
的持续时间内更改浮点类型 T
的舍入模式。它在逻辑上等效于
old = rounding(T)
setrounding(T, mode)
f()
setrounding(T, old)
有关可用的舍入模式,请参见 RoundingMode
。
Base.Rounding.get_zero_subnormals
— 函数get_zero_subnormals() -> Bool
如果对次正规浮点数(“非规格化数”)的操作遵循 IEEE 算术规则,则返回 false
;如果它们可能会转换为零,则返回 true
。
此函数仅影响当前线程。
Base.Rounding.set_zero_subnormals
— 函数set_zero_subnormals(yes::Bool) -> Bool
如果 yes
为 false
,则后续浮点运算遵循次正规值(“非规格化数”)的 IEEE 算术规则。否则,允许(但不强制要求)浮点运算将次正规输入或输出转换为零。除非 yes==true
但硬件不支持将次正规数清零,否则返回 true
。
set_zero_subnormals(true)
可以在某些硬件上加速某些计算。但是,它可能会破坏诸如 (x-y==0) == (x==y)
之类的恒等式。
此函数仅影响当前线程。
整数
Base.count_ones
— 函数count_ones(x::Integer) -> Integer
x
的二进制表示形式中 1 的数量。
示例
julia> count_ones(7)
3
julia> count_ones(Int32(-1))
32
Base.count_zeros
— 函数count_zeros(x::Integer) -> Integer
x
的二进制表示形式中 0 的数量。
示例
julia> count_zeros(Int32(2 ^ 16 - 1))
16
julia> count_zeros(-1)
0
Base.leading_zeros
— 函数leading_zeros(x::Integer) -> Integer
x
的二进制表示形式前导 0 的数量。
示例
julia> leading_zeros(Int32(1))
31
Base.leading_ones
— 函数leading_ones(x::Integer) -> Integer
x
的二进制表示形式前导 1 的数量。
示例
julia> leading_ones(UInt32(2 ^ 32 - 2))
31
Base.trailing_zeros
— 函数trailing_zeros(x::Integer) -> Integer
x
的二进制表示形式尾随 0 的数量。
示例
julia> trailing_zeros(2)
1
Base.trailing_ones
— 函数trailing_ones(x::Integer) -> Integer
x
的二进制表示形式尾随 1 的数量。
示例
julia> trailing_ones(3)
2
Base.isodd
— 函数isodd(x::Number) -> Bool
如果 x
是奇数(即不能被 2 整除的整数),则返回 true
,否则返回 false
。
非 Integer
参数需要 Julia 1.7 或更高版本。
示例
julia> isodd(9)
true
julia> isodd(10)
false
Base.iseven
— 函数iseven(x::Number) -> Bool
如果 x
是偶数(即可以被 2 整除的整数),则返回 true
,否则返回 false
。
非 Integer
参数需要 Julia 1.7 或更高版本。
示例
julia> iseven(9)
false
julia> iseven(10)
true
Core.@int128_str
— 宏@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
— 宏@uint128_str str
将 str
解析为 UInt128
。如果字符串不是有效的整数,则抛出 ArgumentError
。
示例
julia> uint128"123456789123"
0x00000000000000000000001cbe991a83
julia> uint128"-123456789123"
ERROR: LoadError: ArgumentError: invalid base 10 digit '-' in "-123456789123"
[...]
大浮点数和大整数
BigFloat
和 BigInt
类型分别实现了任意精度的浮点和整数运算。对于 BigFloat
,使用 GNU MPFR 库;对于 BigInt
,使用 GNU 多精度算术库 (GMP)。
Base.MPFR.BigFloat
— 方法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)
可能不会产生您期望的结果。
另请参阅
作为关键字参数的 precision
需要 Julia 1.1 或更高版本。在 Julia 1.0 中,precision
是第二个位置参数(BigFloat(x, precision)
)。
示例
julia> BigFloat(2.1) # 2.1 here is a Float64
2.100000000000000088817841970012523233890533447265625
julia> BigFloat("2.1") # the closest BigFloat to 2.1
2.099999999999999999999999999999999999999999999999999999999999999999999999999986
julia> BigFloat("2.1", RoundUp)
2.100000000000000000000000000000000000000000000000000000000000000000000000000021
julia> BigFloat("2.1", RoundUp, precision=128)
2.100000000000000000000000000000000000007
Base.precision
— 函数precision(num::AbstractFloat; base::Integer=2)
precision(T::Type; base::Integer=2)
获取浮点数的精度,由有效位数定义,或浮点类型 T
的精度(如果 T
是像 BigFloat
这样的可变精度类型,则为其当前默认值)。
如果指定了 base
,则它将返回该基数中相应的最大有效位数。
base
关键字需要 Julia 1.8 或更高版本。
Base.MPFR.setprecision
— 函数setprecision([T=BigFloat,] precision::Int; base=2)
设置用于 T
运算的精度(默认为位)。如果指定了 base
,则精度是在给定 base
中至少提供 precision
位数所需的最小精度。
此函数不是线程安全的。它会影响所有线程上运行的代码,但如果与使用该设置的计算同时调用,则其行为未定义。
base
关键字需要 Julia 1.8 或更高版本。
setprecision(f::Function, [T=BigFloat,] precision::Integer; base=2)
在 f
的持续时间内更改 T
运算的精度(以给定的 base
为单位)。它在逻辑上等效于
old = precision(BigFloat)
setprecision(BigFloat, precision)
f()
setprecision(BigFloat, old)
通常用作 setprecision(T, precision) do ... end
注意:nextfloat()
、prevfloat()
不使用 setprecision
提到的精度。
base
关键字需要 Julia 1.8 或更高版本。
Base.GMP.BigInt
— 方法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
— 宏@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
[...]