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