Julia - 基本数学函数
让我们尝试借助本章中的示例来理解基本的数学函数。
数字转换
在 Julia 中,用户可以获得三种不同形式的数值转换。 这三者在处理不精确转换方面有所不同。 它们如下 −
T(x) 或 convert(T, x) − 该表示法将 x 转换为 T 的值。结果取决于以下两种情况 −
T 是浮点类型 − 在这种情况下,结果将是最接近的可表示值。 该值可以是正无穷大或负无穷大。
T 是整数类型 − 当且仅当 x 不能由 T 表示时,结果才会引发 InexactError。
x%T − 此表示法会将整数 x 转换为对应于 x 模 2^n 的整数类型 T 的值。 这里 n 表示 T 中的位数。简单来说,此表示法会截断二进制表示以适应。
舍入函数 − 该表示法采用类型 T 作为计算的可选参数。 例如 − Round(Int, a) 是 Int(round(a)) 的简写。
示例
下面给出的例子代表了上面描述的各种形式 −
julia> Int8(110) 110 julia> Int8(128) ERROR: InexactError: trunc(Int8, 128) Stacktrace: [1] throw_inexacterror(::Symbol, ::Type{Int8}, ::Int64) at .\boot.jl:558 [2] checked_trunc_sint at .\boot.jl:580 [inlined] [3] toInt8 at .\boot.jl:595 [inlined] [4] Int8(::Int64) at .\boot.jl:705 [5] top-level scope at REPL[4]:1 julia> Int8(110.0) 110 julia> Int8(3.14) ERROR: InexactError: Int8(3.14) Stacktrace: [1] Int8(::Float64) at .\float.jl:689 [2] top-level scope at REPL[6]:1 julia> Int8(128.0) ERROR: InexactError: Int8(128.0) Stacktrace: [1] Int8(::Float64) at .\float.jl:689 [2] top-level scope at REPL[7]:1 julia> 110%Int8 110 julia> 128%Int8 -128 julia> round(Int8, 110.35) 110 julia> round(Int8, 127.52) ERROR: InexactError: trunc(Int8, 128.0) Stacktrace: [1] trunc at .\float.jl:682 [inlined] [2] round(::Type{Int8}, ::Float64) at .\float.jl:367 [3] top-level scope at REPL[14]:1
舍入函数
下表显示了 Julia 的原始数字类型支持的舍入函数 −
函数 | 描述 | 返回类型 |
---|---|---|
round(x) | 此函数会将 x 四舍五入到最接近的整数。 | typeof(x) |
round(T, x) | 此函数会将 x 四舍五入到最接近的整数。 | T |
floor(x) | 此函数将 x 舍入到 -Inf 返回与 x 相同类型的最接近的整数值。 该值将小于或等于 x。 | typeof(x) |
floor(T, x) | 该函数将x向-Inf舍入,并将结果转换为T类型。如果该值不可表示,它将抛出InexactError。 | T |
floor(T, x) | 该函数会将 x 舍入到 -Inf 并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | T |
ceil(x) | 此函数会将 x 向 +Inf 舍入,并返回与 x 类型相同的最接近的整数值。 该值将大于或等于 x。 | typeof(x) |
ceil(T, x) | 此函数会将 x 向 +Inf 舍入,并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | T |
trunc(x) | 此函数将 x 向零舍入,并返回与 x 相同类型的最接近的整数值。 绝对值将小于或等于 x。 | typeof(x) |
trunc(T, x) | 此函数会将 x 舍入为零并将结果转换为类型 T。如果该值不可表示,它将抛出 InexactError。 | T |
示例
下面给出的示例表示舍入函数 −
julia> round(3.8) 4.0 julia> round(Int, 3.8) 4 julia> floor(3.8) 3.0 julia> floor(Int, 3.8) 3 julia> ceil(3.8) 4.0 julia> ceil(Int, 3.8) 4 julia> trunc(3.8) 3.0 julia> trunc(Int, 3.8) 3
除法函数
下表显示了 Julia 的原始数字类型支持的除法函数 −
Sl.No | 函数及说明 |
---|---|
1 |
div(x,y), x÷y 这是欧几里得除法的引文。 也称为截断除法。 它计算 x/y 并且商将四舍五入为零。 |
2 |
fld(x,y) 这是地板除法。 商将向 -Inf 舍入,即小于或等于 x/y 的最大整数。 它是 div(x, y, RoundDown) 的简写。 |
3 |
cld(x,y) 是天花板除法。 商将向 +Inf 舍入,即小于或等于 x/y 的最小整数。 它是 div(x, y, RoundUp) 的简写。 |
4 |
rem(x,y) 余数; 满足 x == div(x,y)*y + rem(x,y); 符号匹配 x |
5 |
mod(x,y) 为地板除法后的模数。 该函数满足方程 x == fld(x,y)*y + mod(x,y)。 符号与 y 匹配。 |
6 |
mod1(x,y) 这与偏移量为 1 的 mod 相同。It returns r∈(0,y] for y>0 or r∈[y,0) for y<0, where mod(r, y) == mod(x, y). |
7 |
mod2pi(x) 它是相对于 2pi 的模数。 满足 0 <= mod2pi(x) < 2pi |
8 |
divrem(x,y) 它是欧几里得除法的商和余数。 它相当于 (div(x,y),rem(x,y))。 |
9 |
fldmod(x,y) 它是除法后的下限报价和模数。 它相当于 (fld(x,y),mod(x,y)) |
10 |
gcd(x,y...) 它是 x, y,... 的最大正公约数 |
11 |
lcm(x,y...) 它代表 x, y,... 的最小正公倍数 |
示例
下面给出的示例表示除法函数 −
julia> div(11, 4) 2 julia> div(7, 4) 1 julia> fld(11, 4) 2 julia> fld(-5,3) -2 julia> fld(7.5,3.3) 2.0 julia> cld(7.5,3.3) 3.0 julia> mod(5, 0:2) 2 julia> mod(3, 0:2) 0 julia> mod(8.9,2) 0.9000000000000004 julia> rem(8,4) 0 julia> rem(9,4) 1 julia> mod2pi(7*pi/5) 4.39822971502571 julia> divrem(8,3) (2, 2) julia> fldmod(12,4) (3, 0) julia> fldmod(13,4) (3, 1) julia> mod1(5,4) 1 julia> gcd(6,0) 6 julia> gcd(1//3,2//3) 1//3 julia> lcm(1//3,2//3) 2//3
符号和绝对值函数
下表显示了 Julia 的原始数字类型支持的符号函数和绝对值函数 −
Sl.No | 函数 & 描述 |
---|---|
1 |
abs(x) 它是x的绝对值。 它返回一个大小为 x 的正值。 |
2 |
abs2(x) 它返回 x 的平方绝对值。 |
3 |
sign(x) 该函数表示 x 的符号。 它将返回 -1、0 或 +1。 |
4 |
signbit(x) 此函数指示符号位是打开(true)还是关闭(false)。 简单来说,如果x的符号值为-ve则返回true,否则返回false。 |
5 |
copysign(x,y) 它返回一个值 Z,其大小为 x,符号与 y 相同。 |
6 |
flipsign(x,y) 它返回一个值,其大小为 x,符号为 x*y。 如果 y 为负数,则符号将翻转。 例子: abs(x) = flipsign(x,x). |
示例
下面给出的示例表示符号函数和绝对值函数 −
julia> abs(-7) 7 julia> abs(5+3im) 5.830951894845301 julia> abs2(-7) 49 julia> abs2(5+3im) 34 julia> copysign(5,-10) -5 julia> copysign(-5,10) 5 julia> sign(5) 1 julia> sign(-5) -1 julia> signbit(-5) true julia> signbit(5) false julia> flipsign(5,10) 5 julia> flipsign(5,-10) -5
Power, Logs, 和 Root 函数
下表显示了 Julia 的原始数字类型支持的 Power、Logs 和 Root 函数 −
Sl.No | 函数及说明 |
---|---|
1 |
sqrt(x), √x 它将返回 x 的平方根。 对于负实参,它将抛出 DomainError。 |
2 |
cbrt(x), ∛x 它将返回 x 的立方根。 它还接受负值。 |
3 |
hypot(x,y) 它将计算其他边长度为 x 和 y 的直角三角形的斜边 √|𝑥|2+|𝑦|2。 它是 Carlos 和 F.Borges 改进的 Hypot(a,b) 算法的实现。 |
4 |
exp(x) 它将计算 x 的自然底指数,即 𝑒𝑥 |
5 |
expm1(x) 它将在 x 接近零时准确计算 𝑒𝑥−1。 |
6 |
ldexp(x,n) 它将针对 n 的整数值有效地计算 𝑋 ∗ 2𝑛。 |
7 |
log(x) 它将计算 x 的自然对数。 对于负实参,它将抛出 DomainError。 |
8 |
log(b,x) 它将计算 x 以 b 为底的对数。 对于负实参,它将抛出 DomainError。 |
9 |
log2(x) 它将计算 x 以 2 为底的对数。 对于负实参,它将抛出 DomainError。 |
10 |
log10(x) 它将计算 x 以 10 为底的对数。 对于负实参,它将抛出 DomainError。 |
11 |
log1p(x) 它将准确计算 x 接近零时的 log(1+x)。 对于负实参,它将抛出 DomainError。 |
12 |
exponent(x) 它将计算 x 的二进制指数。 |
13 |
significand(x) 它将提取二进制表示形式的浮点数 x 的二进制有效数(也称为尾数)。 如果 x = 非零有限数,则返回区间 [1,2) 上相同类型的数,否则返回 x。 |
示例
下面给出的示例代表幂函数、对数函数和根函数 −
julia> sqrt(49) 7.0 julia> sqrt(-49) ERROR: DomainError with -49.0: sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)). Stacktrace: [1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33 [2] sqrt at .\math.jl:573 [inlined] [3] sqrt(::Int64) at .\math.jl:599 [4] top-level scope at REPL[43]:1 julia> cbrt(8) 2.0 julia> cbrt(-8) -2.0 julia> a = Int64(5)^10; julia> hypot(a, a) 1.3810679320049757e7 julia> exp(5.0) 148.4131591025766 julia> expm1(10) 22025.465794806718 julia> expm1(1.0) 1.718281828459045 julia> ldexp(4.0, 2) 16.0 julia> log(5,2) 0.43067655807339306 julia> log(4,2) 0.5 julia> log(4) 1.3862943611198906 julia> log2(4) 2.0 julia> log10(4) 0.6020599913279624 julia> log1p(4) 1.6094379124341003 julia> log1p(-2) ERROR: DomainError with -2.0: log1p will only return a complex result if called with a complex argument. Try log1p(Complex(x)). Stacktrace: [1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33 [2] log1p(::Float64) at .\special\log.jl:356 [3] log1p(::Int64) at .\special\log.jl:395 [4] top-level scope at REPL[65]:1 julia> exponent(6.8) 2 julia> significand(15.2)/10.2 0.18627450980392157 julia> significand(15.2)*8 15.2
三角函数和双曲函数
以下是所有标准三角函数和双曲函数的列表 −
sin cos tan cot sec csc sinh cosh tanh coth sech csch asin acos atan acot asec acsc asinh acosh atanh acoth asech acsch sinc cosc
Julia 还提供了两个附加函数,即 sinpi(x) 和 cospi(x),用于精确计算 sin(pi*x) 和 cos(pi*x)。
如果要计算带度数的三角函数,请在函数后面加上 d 后缀,如下所示 −
sind cosd tand cotd secd cscd asind acosd atand acotd asecd acscd
下面给出了一些示例 −
julia> cos(56) 0.853220107722584 julia> cosd(56) 0.5591929034707468