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 的原始数字类型支持的舍入函数 -
功能 | 描述 | 返回类型 |
---|---|---|
轮(x) | 该函数将 x 四舍五入到最接近的整数。 | 类型(x) |
圆(T,x) | 该函数将 x 四舍五入到最接近的整数。 | 时间 |
楼层(x) | 此函数将 x 向 -Inf 舍入,返回与 x 相同类型的最接近的整数值。该值将小于或等于 x。 | 类型(x) |
楼层(T, x) | 此函数会将 x 舍入到 -Inf 并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | 时间 |
楼层(T, x) | 此函数会将 x 舍入到 -Inf 并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | 时间 |
上限(x) | 此函数将 x 向 +Inf 舍入,并返回与 x 相同类型的最接近的整数值。该值将大于或等于 x。 | 类型(x) |
细胞(T,x) | 该函数将 x 向 +Inf 舍入,并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | 时间 |
截断(x) | 该函数将 x 向零舍入,并返回与 x 相同类型的最接近的整数值。绝对值将小于或等于 x。 | 类型(x) |
截断(T,x) | 该函数会将 x 舍入为零并将结果转换为 T 类型。如果该值不可表示,它将抛出 InexactError。 | 时间 |
例子
下面给出的示例代表舍入函数 -
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 的原始数字类型支持的除法函数 -
车号 | 功能说明 |
---|---|
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 |
雷姆(x,y) 余; 满足 x == div(x,y)*y + rem(x,y);符号匹配 x |
5 |
模(x,y) 是地板除法后的模数。该函数满足方程 x == fld(x,y)*y + mod(x,y)。符号与 y 匹配。 |
6 |
mod1(x,y) 这与偏移量为 1 的 mod 相同。对于 y>0,它返回 r∈(0,y];对于 y<0,它返回 r∈[y,0),其中 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 |
最大公约数(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 的原始数字类型支持的符号和绝对值函数 -
车号 | 功能与功能 |
---|---|
1 |
绝对值(x) 它是x的绝对值。它返回一个大小为 x 的正值。 |
2 |
绝对值2(x) 它返回 x 的绝对值的平方。 |
3 |
符号(x) 该函数表示 x 的符号。它将返回 -1、0 或 +1。 |
4 |
符号位(x) 该函数指示符号位是打开(真)还是关闭(假)。简单来说,如果x的符号值为-ve,则返回true,否则返回false。 |
5 |
复制签名(x,y) 它返回一个值 Z,其大小为 x,符号与 y 相同。 |
6 |
翻转符号(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
电源、日志和根
下表显示了 Julia 的原始数字类型支持的 Power、Logs 和 Root 函数 -
车号 | 功能说明 |
---|---|
1 |
开方(x), √x 它将返回 x 的平方根。对于负实参,它将抛出 DomainError。 |
2 |
cbrt(x), ∛x 它将返回 x 的立方根。它还接受负值。 |
3 |
假设(x,y) 它将计算斜边 √| |