Mathematics
Mathematical Operators
Base.:-
— Method-(x)
Unärer Minusoperator.
Beispiele
julia> -1
-1
julia> -(2)
-2
julia> -[1 2; 3 4]
2×2 Matrix{Int64}:
-1 -2
-3 -4
julia> -(true) # wird zu Int befördert
-1
julia> -(0x003)
0xfffd
Base.:+
— Functiondt::Date + t::Time -> DateTime
Die Addition eines Date
mit einem Time
ergibt ein DateTime
. Die Stunden-, Minuten-, Sekunden- und Millisekundenanteile des Time
werden zusammen mit dem Jahr, Monat und Tag des Date
verwendet, um das neue DateTime
zu erstellen. Nicht-null Mikrosekunden oder Nanosekunden im Time
-Typ führen zu einem InexactError
.
+(x, y...)
Addition Operator.
Infix x+y+z+...
ruft diese Funktion mit allen Argumenten auf, d.h. +(x, y, z, ...)
, die standardmäßig dann (x+y) + z + ...
von links nach rechts aufruft.
Beachten Sie, dass Überlauf für die meisten Ganzzahltypen, einschließlich des Standardtyps Int
, möglich ist, wenn große Zahlen addiert werden.
Beispiele
julia> 1 + 20 + 4
25
julia> +(1, 20, 4)
25
julia> [1,2] + [3,4]
2-element Vector{Int64}:
4
6
julia> typemax(Int) + 1 < 0
true
Base.:-
— Method-(x, y)
Subtraktionsoperator.
Beispiele
julia> 2 - 3
-1
julia> -(2, 4.5)
-2.5
Base.:*
— Method*(x, y...)
Multiplikationsoperator.
Infix x*y*z*...
ruft diese Funktion mit allen Argumenten auf, d.h. *(x, y, z, ...)
, die standardmäßig dann (x*y) * z * ...
von links aus aufruft.
Juxtaposition wie 2pi
ruft ebenfalls *(2, pi)
auf. Beachten Sie, dass diese Operation eine höhere Priorität hat als ein literales *
. Beachten Sie auch, dass die Juxtaposition "0x..." (ganzzahlig null mal eine Variable, deren Name mit x
beginnt) verboten ist, da sie mit nicht signierten Ganzzahl-Literalen in Konflikt steht: 0x01 isa UInt8
.
Beachten Sie, dass Überlauf für die meisten Ganzzahltypen, einschließlich des Standardtyps Int
, beim Multiplizieren großer Zahlen möglich ist.
Beispiele
julia> 2 * 7 * 8
112
julia> *(2, 7, 8)
112
julia> [2 0; 0 3] * [1, 10] # Matrix * Vektor
2-element Vector{Int64}:
2
30
julia> 1/2pi, 1/2*pi # Juxtaposition hat höhere Priorität
(0.15915494309189535, 1.5707963267948966)
julia> x = [1, 2]; x'x # adjungierter Vektor * Vektor
5
Base.:/
— Function/(x, y)
Rechter Divisionsoperator: Multiplikation von x
mit dem Inversen von y
auf der rechten Seite.
Gibt Fließkommaergebnisse für ganzzahlige Argumente zurück. Siehe ÷
für ganzzahlige Division oder //
für Rational
Ergebnisse.
Beispiele
julia> 1/2
0.5
julia> 4/2
2.0
julia> 4.5/2
2.25
A / B
Matrix-Rechtsdivision: A / B
ist äquivalent zu (B' \ A')'
, wobei \
der Linksdivisionsoperator ist. Für quadratische Matrizen ist das Ergebnis X
so, dass A == X*B
.
Siehe auch: rdiv!
.
Beispiele
julia> A = Float64[1 4 5; 3 9 2]; B = Float64[1 4 2; 3 4 2; 8 7 1];
julia> X = A / B
2×3 Matrix{Float64}:
-0.65 3.75 -1.2
3.25 -2.75 1.0
julia> isapprox(A, X*B)
true
julia> isapprox(X, A*pinv(B))
true
Base.:\
— Method\(x, y)
Linker-Operator: Multiplikation von y
mit der Inversen von x
von links. Gibt Fließkommaergebnisse für ganzzahlige Argumente zurück.
Beispiele
julia> 3 \ 6
2.0
julia> inv(3) * 6
2.0
julia> A = [4 3; 2 1]; x = [5, 6];
julia> A \ x
2-element Vector{Float64}:
6.5
-7.0
julia> inv(A) * x
2-element Vector{Float64}:
6.5
-7.0
Base.:^
— Method^(x, y)
Exponentiationsoperator.
Wenn x
und y
Ganzzahlen sind, kann das Ergebnis überlaufen. Um Zahlen in wissenschaftlicher Notation einzugeben, verwenden Sie Float64
Literale wie 1.2e3
anstelle von 1.2 * 10^3
.
Wenn y
ein Int
Literal ist (z. B. 2
in x^2
oder -3
in x^-3
), wird der Julia-Code x^y
vom Compiler in Base.literal_pow(^, x, Val(y))
umgewandelt, um eine Spezialisierung zur Kompilierzeit auf den Wert des Exponenten zu ermöglichen. (Als Standardfallback haben wir Base.literal_pow(^, x, Val(y)) = ^(x,y)
, wobei normalerweise ^ == Base.^
gilt, es sei denn, ^
wurde im aufrufenden Namensraum definiert.) Wenn y
ein negatives ganzzahliges Literal ist, transformiert Base.literal_pow
die Operation standardmäßig in inv(x)^-y
, wobei -y
positiv ist.
Beispiele
julia> 3^5
243
julia> 3^-1 # verwendet Base.literal_pow
0.3333333333333333
julia> p = -1;
julia> 3^p
ERROR: DomainError mit -1:
Kann eine Ganzzahl x nicht auf eine negative Potenz -1 heben.
[...]
julia> 3.0^p
0.3333333333333333
julia> 10^19 > 0 # Ganzzahlüberlauf
false
julia> big(10)^19 == 1e19
true
Base.fma
— Functionfma(x, y, z)
Berechnet x*y+z
ohne das Zwischenergebnis x*y
zu runden. Auf einigen Systemen ist dies erheblich teurer als x*y+z
. fma
wird verwendet, um die Genauigkeit in bestimmten Algorithmen zu verbessern. Siehe muladd
.
Base.muladd
— Functionmuladd(x, y, z)
Kombinierte Multiplikation-Addition: berechnet x*y+z
, erlaubt jedoch, dass die Addition und Multiplikation mit einander oder mit umgebenden Operationen zur Leistungssteigerung zusammengeführt werden. Zum Beispiel kann dies als fma
implementiert werden, wenn die Hardware dies effizient unterstützt. Das Ergebnis kann auf verschiedenen Maschinen unterschiedlich sein und kann auch auf derselben Maschine aufgrund von Konstantenpropagation oder anderen Optimierungen unterschiedlich sein. Siehe fma
.
Beispiele
julia> muladd(3, 2, 1)
7
julia> 3 * 2 + 1
7
muladd(A, y, z)
Kombinierte Multiplikation-Addition, A*y .+ z
, für Matrix-Matrix- oder Matrix-Vektor-Multiplikation. Das Ergebnis hat immer die gleiche Größe wie A*y
, aber z
kann kleiner oder ein Skalar sein.
Diese Methoden erfordern Julia 1.6 oder später.
Beispiele
julia> A=[1.0 2.0; 3.0 4.0]; B=[1.0 1.0; 1.0 1.0]; z=[0, 100];
julia> muladd(A, B, z)
2×2 Matrix{Float64}:
3.0 3.0
107.0 107.0
Base.inv
— Methodinv(x)
Gibt das multiplikative Inverse von x
zurück, so dass x*inv(x)
oder inv(x)*x
one(x)
(die multiplikative Identität) bis auf Rundungsfehler ergibt.
Wenn x
eine Zahl ist, ist dies im Wesentlichen dasselbe wie one(x)/x
, aber für einige Typen kann inv(x)
etwas effizienter sein.
Beispiele
julia> inv(2)
0.5
julia> inv(1 + 2im)
0.2 - 0.4im
julia> inv(1 + 2im) * (1 + 2im)
1.0 + 0.0im
julia> inv(2//3)
3//2
inv(::Missing)
erfordert mindestens Julia 1.2.
Base.div
— Functiondiv(x, y)
÷(x, y)
Der Quotient aus der euklidischen (ganzzahligen) Division. Allgemein äquivalent zu einer mathematischen Operation x/y ohne einen Bruchteil.
Siehe auch: cld
, fld
, rem
, divrem
.
Beispiele
julia> 9 ÷ 4
2
julia> -5 ÷ 3
-1
julia> 5.0 ÷ 2
2.0
julia> div.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
-1 -1 -1 0 0 0 0 0 1 1 1
Base.div
— Methoddiv(x, y, r::RoundingMode=RoundToZero)
Der Quotient aus der euklidischen (ganzzahligen) Division. Berechnet x / y
, gerundet auf eine ganze Zahl gemäß dem Rundungsmodus r
. Mit anderen Worten, die Größe
round(x / y, r)
ohne Zwischenrundung.
Die Methode mit drei Argumenten, die einen RoundingMode
verwendet, erfordert Julia 1.4 oder höher.
Siehe auch fld
und cld
, die spezielle Fälle dieser Funktion sind.
RoundFromZero
erfordert mindestens Julia 1.9.
Beispiele:
julia> div(4, 3, RoundToZero) # Entspricht div(4, 3)
1
julia> div(4, 3, RoundDown) # Entspricht fld(4, 3)
1
julia> div(4, 3, RoundUp) # Entspricht cld(4, 3)
2
julia> div(5, 2, RoundNearest)
2
julia> div(5, 2, RoundNearestTiesAway)
3
julia> div(-5, 2, RoundNearest)
-2
julia> div(-5, 2, RoundNearestTiesAway)
-3
julia> div(-5, 2, RoundNearestTiesUp)
-2
julia> div(4, 3, RoundFromZero)
2
julia> div(-4, 3, RoundFromZero)
-2
Base.fld
— Functionfld(x, y)
Größte ganze Zahl, die kleiner oder gleich x / y
ist. Entspricht div(x, y, RoundDown)
.
Beispiele
julia> fld(7.3, 5.5)
1.0
julia> fld.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
-2 -2 -1 -1 -1 0 0 0 1 1 1
Da fld(x, y)
eine streng korrekte Abrundung basierend auf dem wahren Wert von Fließkommazahlen implementiert, können unintuitive Situationen auftreten. Zum Beispiel:
julia> fld(6.0, 0.1)
59.0
julia> 6.0 / 0.1
60.0
julia> 6.0 / big(0.1)
59.99999999999999666933092612453056361837965690217069245739573412231113406246995
Was hier passiert, ist, dass der wahre Wert der Fließkommazahl, die als 0.1
geschrieben ist, leicht größer ist als der numerische Wert 1/10, während 6.0
die Zahl 6 genau darstellt. Daher ist der wahre Wert von 6.0 / 0.1
leicht kleiner als 60. Bei der Division wird dies genau auf 60.0
gerundet, aber fld(6.0, 0.1)
nimmt immer die Abrundung des wahren Wertes, sodass das Ergebnis 59.0
ist.
Base.cld
— Functioncld(x, y)
Kleinste ganze Zahl, die größer oder gleich x / y
ist. Entspricht div(x, y, RoundUp)
.
Beispiele
julia> cld(5.5, 2.2)
3.0
julia> cld.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
-1 -1 -1 0 0 0 1 1 1 2 2
Base.mod
— Functionmod(x::Integer, r::AbstractUnitRange)
Finde y
im Bereich r
, so dass $x ≡ y (mod n)$, wobei n = length(r)
, d.h. y = mod(x - first(r), n) + first(r)
.
Siehe auch mod1
.
Beispiele
julia> mod(0, Base.OneTo(3)) # mod1(0, 3)
3
julia> mod(3, 0:2) # mod(3, 3)
0
Diese Methode erfordert mindestens Julia 1.3.
mod(x, y)
rem(x, y, RoundDown)
Die Reduktion von x
modulo y
, oder äquivalent, der Rest von x
nach ganzzahliger Division durch y
, d.h. x - y*fld(x,y)
, wenn ohne Zwischenrundung berechnet.
Das Ergebnis hat das gleiche Vorzeichen wie y
und eine Größe, die kleiner ist als abs(y)
(mit einigen Ausnahmen, siehe Hinweis unten).
!!! Hinweis Wenn mit Fließkommawerten verwendet, kann das exakte Ergebnis möglicherweise nicht durch den Typ dargestellt werden, und es kann daher zu Rundungsfehlern kommen. Insbesondere, wenn das exakte Ergebnis sehr nahe an y
liegt, kann es auf y
gerundet werden.
Siehe auch: rem
, div
, fld
, mod1
, invmod
.
julia> mod(8, 3)
2
julia> mod(9, 3)
0
julia> mod(8.9, 3)
2.9000000000000004
julia> mod(eps(), 3)
2.220446049250313e-16
julia> mod(-eps(), 3)
3.0
julia> mod.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
1 2 0 1 2 0 1 2 0 1 2
rem(x::Integer, T::Type{<:Integer}) -> T
mod(x::Integer, T::Type{<:Integer}) -> T
%(x::Integer, T::Type{<:Integer}) -> T
Finde y::T
, so dass x
≡ y
(mod n), wobei n die Anzahl der in T
darstellbaren Ganzzahlen ist und y
eine Ganzzahl in [typemin(T),typemax(T)]
ist. Wenn T
jede Ganzzahl darstellen kann (z. B. T == BigInt
), entspricht diese Operation einer Umwandlung in T
.
Beispiele
julia> x = 129 % Int8
-127
julia> typeof(x)
Int8
julia> x = 129 % BigInt
129
julia> typeof(x)
BigInt
Base.rem
— Functionrem(x, y)
%(x, y)
Rest von der euklidischen Division, der einen Wert mit dem gleichen Vorzeichen wie x
zurückgibt und in der Größe kleiner als y
ist. Dieser Wert ist immer genau.
Siehe auch: div
, mod
, mod1
, divrem
.
Beispiele
julia> x = 15; y = 4;
julia> x % y
3
julia> x == div(x, y) * y + rem(x, y)
true
julia> rem.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
-2 -1 0 -2 -1 0 1 2 0 1 2
Base.rem
— Methodrem(x, y, r::RoundingMode=RoundToZero)
Berechne den Rest von x
nach der ganzzahligen Division durch y
, wobei der Quotient gemäß dem Rundungsmodus r
gerundet wird. Mit anderen Worten, die Größe
x - y * round(x / y, r)
ohne Zwischenrundung.
- wenn
r == RoundNearest
, dann ist das Ergebnis genau und im Intervall $[-|y| / 2, |y| / 2]$. Siehe auchRoundNearest
. - wenn
r == RoundToZero
(Standard), dann ist das Ergebnis genau und im Intervall $[0, |y|)$, wennx
positiv ist, oder $(-|y|, 0]$ andernfalls. Siehe auchRoundToZero
. - wenn
r == RoundDown
, dann liegt das Ergebnis im Intervall $[0, y)$, wenny
positiv ist, oder $(y, 0]$ andernfalls. Das Ergebnis kann ungenau sein, wennx
undy
unterschiedliche Vorzeichen haben undabs(x) < abs(y)
. Siehe auchRoundDown
. - wenn
r == RoundUp
, dann liegt das Ergebnis im Intervall $(-y, 0]$, wenny
positiv ist, oder $[0, -y)$ andernfalls. Das Ergebnis kann ungenau sein, wennx
undy
dasselbe Vorzeichen haben undabs(x) < abs(y)
. Siehe auchRoundUp
. - wenn
r == RoundFromZero
, dann liegt das Ergebnis im Intervall $(-y, 0]$, wenny
positiv ist, oder $[0, -y)$ andernfalls. Das Ergebnis kann ungenau sein, wennx
undy
dasselbe Vorzeichen haben undabs(x) < abs(y)
. Siehe auchRoundFromZero
.
RoundFromZero
erfordert mindestens Julia 1.9.
Beispiele:
julia> x = 9; y = 4;
julia> x % y # dasselbe wie rem(x, y)
1
julia> x ÷ y # dasselbe wie div(x, y)
2
julia> x == div(x, y) * y + rem(x, y)
true
Base.Math.rem2pi
— Functionrem2pi(x, r::RoundingMode)
Berechnet den Rest von x
nach der ganzzahligen Division durch 2π
, wobei der Quotient gemäß dem Rundungsmodus r
gerundet wird. Mit anderen Worten, die Größe
x - 2π*round(x/(2π),r)
ohne Zwischenrundung. Dies verwendet intern eine hochpräzise Näherung von 2π und liefert daher ein genaueres Ergebnis als rem(x,2π,r)
- wenn
r == RoundNearest
, dann liegt das Ergebnis im Intervall $[-π, π]$. Dies wird im Allgemeinen das genaueste Ergebnis sein. Siehe auchRoundNearest
. - wenn
r == RoundToZero
, dann liegt das Ergebnis im Intervall $[0, 2π]$, wennx
positiv ist, oder $[-2π, 0]$ andernfalls. Siehe auchRoundToZero
. - wenn
r == RoundDown
, dann liegt das Ergebnis im Intervall $[0, 2π]$. Siehe auchRoundDown
. - wenn
r == RoundUp
, dann liegt das Ergebnis im Intervall $[-2π, 0]$. Siehe auchRoundUp
.
Beispiele
julia> rem2pi(7pi/4, RoundNearest)
-0.7853981633974485
julia> rem2pi(7pi/4, RoundDown)
5.497787143782138
Base.Math.mod2pi
— Functionmod2pi(x)
Modulus nach Division durch 2π
, Rückgabe im Bereich $[0,2π)$.
Diese Funktion berechnet eine Fließkommadarstellung des Modulus nach Division durch numerisch exaktes 2π
und ist daher nicht genau dasselbe wie mod(x,2π)
, das den Modulus von x
relativ zur Division durch die Fließkommazahl 2π
berechnen würde.
!!! Hinweis Abhängig vom Format des Eingabewerts kann der nächstgelegene darstellbare Wert zu 2π kleiner als 2π sein. Zum Beispiel wird der Ausdruck mod2pi(2π)
nicht 0
zurückgeben, da der Zwischenwert von 2*π
ein Float64
ist und 2*Float64(π) < 2*big(π)
. Siehe rem2pi
für eine verfeinerte Kontrolle dieses Verhaltens.
Beispiele
julia> mod2pi(9*pi/4)
0.7853981633974481
Base.divrem
— Functiondivrem(x, y, r::RoundingMode=RoundToZero)
Der Quotient und der Rest aus der euklidischen Division. Entspricht (div(x, y, r), rem(x, y, r))
. Entsprechend ist dieser Aufruf mit dem Standardwert von r
gleichbedeutend mit (x ÷ y, x % y)
.
Beispiele
julia> divrem(3, 7)
(0, 3)
julia> divrem(7, 3)
(2, 1)
Base.fldmod
— Functionfldmod(x, y)
Der abgerundete Quotient und der Modulus nach der Division. Ein praktischer Wrapper für divrem(x, y, RoundDown)
. Entspricht (fld(x, y), mod(x, y))
.
Base.fld1
— Functionfld1(x, y)
Bodendivision, die einen Wert zurückgibt, der mit mod1(x,y)
übereinstimmt.
Beispiele
julia> x = 15; y = 4;
julia> fld1(x, y)
4
julia> x == fld(x, y) * y + mod(x, y)
true
julia> x == (fld1(x, y) - 1) * y + mod1(x, y)
true
Base.mod1
— Functionmod1(x, y)
Modulus nach ganzzahliger Division, gibt einen Wert r
zurück, sodass mod(r, y) == mod(x, y)
im Bereich $(0, y]$ für positives y
und im Bereich $[y,0)$ für negatives y
.
Bei ganzzahligen Argumenten und positivem y
entspricht dies mod(x, 1:y)
, und ist daher natürlich für 1-basierte Indizierung. Im Vergleich dazu ist mod(x, y) == mod(x, 0:y-1)
natürlich für Berechnungen mit Offsets oder Schritten.
Siehe auch mod
, fld1
, fldmod1
.
Beispiele
julia> mod1(4, 2)
2
julia> mod1.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) mit eltype Int64:
1 2 3 1 2 3 1 2 3 1 2
julia> mod1.([-0.1, 0, 0.1, 1, 2, 2.9, 3, 3.1]', 3)
1×8 Matrix{Float64}:
2.9 3.0 0.1 1.0 2.0 2.9 3.0 0.1
Base.fldmod1
— FunctionBase.://
— Function//(num, den)
Teile zwei ganze Zahlen oder rationale Zahlen, wobei ein Rational
Ergebnis zurückgegeben wird. Allgemeiner kann //
für die exakte rationale Division anderer numerischer Typen mit ganzzahligen oder rationalen Komponenten verwendet werden, wie z. B. komplexe Zahlen mit ganzzahligen Komponenten.
Beachte, dass Gleitkomma-(AbstractFloat
) Argumente von //
nicht erlaubt sind (auch wenn die Werte rational sind). Die Argumente müssen Untertypen von Integer
, Rational
oder deren Kombinationen sein.
Beispiele
julia> 3 // 5
3//5
julia> (3 // 5) // (2 // 1)
3//10
julia> (1+2im) // (3+4im)
11//25 + 2//25*im
julia> 1.0 // 2
ERROR: MethodError: no method matching //(::Float64, ::Int64)
[...]
Base.rationalize
— Functionrationalize([T<:Integer=Int,] x; tol::Real=eps(x))
Näherungsweise Gleitkommazahl x
als eine Rational
Zahl mit Komponenten des angegebenen Ganzzahltyps. Das Ergebnis unterscheidet sich von x
um nicht mehr als tol
.
Beispiele
julia> rationalize(5.6)
28//5
julia> a = rationalize(BigInt, 10.3)
103//10
julia> typeof(numerator(a))
BigInt
Base.numerator
— Functionnumerator(x)
Zähler der rationalen Darstellung von x
.
Beispiele
julia> numerator(2//3)
2
julia> numerator(4)
4
Base.denominator
— Functiondenominator(x)
Nenner der rationalen Darstellung von x
.
Beispiele
julia> denominator(2//3)
3
julia> denominator(4)
1
Base.:<<
— Function<<(x, n)
Linker Bitverschiebungsoperator, x << n
. Für n >= 0
ist das Ergebnis x
, das um n
Bits nach links verschoben wird, wobei mit 0
s aufgefüllt wird. Dies entspricht x * 2^n
. Für n < 0
entspricht dies x >> -n
.
Beispiele
julia> Int8(3) << 2
12
julia> bitstring(Int8(3))
"00000011"
julia> bitstring(Int8(12))
"00001100"
<<(B::BitVector, n) -> BitVector
Linker Bitverschiebungsoperator, B << n
. Für n >= 0
ist das Ergebnis B
mit Elementen, die um n
Positionen nach hinten verschoben sind, wobei mit false
-Werten aufgefüllt wird. Wenn n < 0
, werden die Elemente nach vorne verschoben. Entspricht B >> -n
.
Beispiele
julia> B = BitVector([true, false, true, false, false])
5-element BitVector:
1
0
1
0
0
julia> B << 1
5-element BitVector:
0
1
0
0
0
julia> B << -1
5-element BitVector:
0
1
0
1
0
Base.:>>
— Function>>(x, n)
Rechter Bitverschiebungsoperator, x >> n
. Für n >= 0
ist das Ergebnis x
, das um n
Bits nach rechts verschoben wird, wobei mit 0
s gefüllt wird, wenn x >= 0
, und mit 1
s, wenn x < 0
, wobei das Vorzeichen von x
beibehalten wird. Dies entspricht fld(x, 2^n)
. Für n < 0
entspricht dies x << -n
.
Beispiele
julia> Int8(13) >> 2
3
julia> bitstring(Int8(13))
"00001101"
julia> bitstring(Int8(3))
"00000011"
julia> Int8(-14) >> 2
-4
julia> bitstring(Int8(-14))
"11110010"
julia> bitstring(Int8(-4))
"11111100"
>>(B::BitVector, n) -> BitVector
Rechter Bitverschiebungsoperator, B >> n
. Für n >= 0
ist das Ergebnis B
mit Elementen, die um n
Positionen nach vorne verschoben werden, wobei mit false
-Werten aufgefüllt wird. Wenn n < 0
ist, werden die Elemente nach hinten verschoben. Entspricht B << -n
.
Beispiele
julia> B = BitVector([true, false, true, false, false])
5-element BitVector:
1
0
1
0
0
julia> B >> 1
5-element BitVector:
0
1
0
1
0
julia> B >> -1
5-element BitVector:
0
1
0
0
0
Base.:>>>
— Function>>>(x, n)
Unsignierter rechter Bitverschiebungsoperator, x >>> n
. Für n >= 0
ist das Ergebnis x
, das um n
Bits nach rechts verschoben wird, wobei mit 0
s aufgefüllt wird. Für n < 0
entspricht dies x << -n
.
Für Unsigned
Ganzzahltypen entspricht dies >>
. Für Signed
Ganzzahltypen entspricht dies signed(unsigned(x) >> n)
.
Beispiele
julia> Int8(-14) >>> 2
60
julia> bitstring(Int8(-14))
"11110010"
julia> bitstring(Int8(60))
"00111100"
BigInt
s werden behandelt, als hätten sie eine unendliche Größe, sodass kein Auffüllen erforderlich ist und dies entspricht >>
.
>>>(B::BitVector, n) -> BitVector
Unsignierter rechter Bitverschiebungsoperator, B >>> n
. Entspricht B >> n
. Siehe >>
für Details und Beispiele.
Base.bitrotate
— Functionbitrotate(x::Base.BitInteger, k::Integer)
bitrotate(x, k)
implementiert eine bitweise Rotation. Es gibt den Wert von x
zurück, dessen Bits k
Mal nach links rotiert wurden. Ein negativer Wert von k
rotiert stattdessen nach rechts.
Diese Funktion erfordert Julia 1.5 oder höher.
Siehe auch: <<
, circshift
, BitArray
.
julia> bitrotate(UInt8(114), 2)
0xc9
julia> bitstring(bitrotate(0b01110010, 2))
"11001001"
julia> bitstring(bitrotate(0b01110010, -2))
"10011100"
julia> bitstring(bitrotate(0b01110010, 8))
"01110010"
Base.::
— Function:expr
Zitiert einen Ausdruck expr
und gibt den abstrakten Syntaxbaum (AST) von expr
zurück. Der AST kann vom Typ Expr
, Symbol
oder einem literalen Wert sein. Die Syntax :identifier
wertet zu einem Symbol
aus.
Siehe auch: Expr
, Symbol
, Meta.parse
Beispiele
julia> expr = :(a = b + 2*x)
:(a = b + 2x)
julia> sym = :some_identifier
:some_identifier
julia> value = :0xff
0xff
julia> typeof((expr, sym, value))
Tuple{Expr, Symbol, UInt8}
Base.range
— Functionrange(start, stop, length)
range(start, stop; length, step)
range(start; length, stop, step)
range(;start, length, stop, step)
Konstruiere ein spezialisiertes Array mit gleichmäßig verteilten Elementen und optimierter Speicherung (ein AbstractRange
) aus den Argumenten. Mathematisch wird ein Bereich eindeutig durch drei der Werte start
, step
, stop
und length
bestimmt. Gültige Aufrufe von range sind:
- Rufe
range
mit drei der Wertestart
,step
,stop
,length
auf. - Rufe
range
mit zwei der Wertestart
,stop
,length
auf. In diesem Fall wirdstep
als eins angenommen. Wenn beide Argumente Ganzzahlen sind, wird einUnitRange
zurückgegeben. - Rufe
range
mit einem der Wertestop
oderlength
auf.start
undstep
werden als eins angenommen.
Siehe Erweiterte Hilfe für zusätzliche Details zum zurückgegebenen Typ. Siehe auch logrange
für logarithmisch verteilte Punkte.
Beispiele
julia> range(1, length=100)
1:100
julia> range(1, stop=100)
1:100
julia> range(1, step=5, length=100)
1:5:496
julia> range(1, step=5, stop=100)
1:5:96
julia> range(1, 10, length=101)
1.0:0.09:10.0
julia> range(1, 100, step=5)
1:5:96
julia> range(stop=10, length=5)
6:10
julia> range(stop=10, step=1, length=5)
6:1:10
julia> range(start=1, step=1, stop=10)
1:1:10
julia> range(; length = 10)
Base.OneTo(10)
julia> range(; stop = 6)
Base.OneTo(6)
julia> range(; stop = 6.5)
1.0:1.0:6.0
Wenn length
nicht angegeben ist und stop - start
kein ganzzahliges Vielfaches von step
ist, wird ein Bereich erzeugt, der vor stop
endet.
julia> range(1, 3.5, step=2)
1.0:2.0:3.0
Besondere Sorgfalt wird darauf verwendet, sicherzustellen, dass Zwischenwerte rational berechnet werden. Um diesen induzierten Overhead zu vermeiden, siehe den LinRange
Konstruktor.
stop
als positionsgebundenes Argument erfordert mindestens Julia 1.1.
Die Versionen ohne Schlüsselwortargumente und start
als Schlüsselwortargument erfordern mindestens Julia 1.7.
Die Versionen mit stop
als einzigem Schlüsselwortargument oder length
als einzigem Schlüsselwortargument erfordern mindestens Julia 1.8.
Erweiterte Hilfe
range
erzeugt ein Base.OneTo
, wenn die Argumente Ganzzahlen sind und
- Nur
length
angegeben ist - Nur
stop
angegeben ist
range
erzeugt einen UnitRange
, wenn die Argumente Ganzzahlen sind und
- Nur
start
undstop
angegeben sind - Nur
length
undstop
angegeben sind
Ein UnitRange
wird nicht erzeugt, wenn step
angegeben ist, selbst wenn es als eins angegeben ist.
Base.OneTo
— TypeBase.OneTo(n)
Definieren Sie einen AbstractUnitRange
, der sich wie 1:n
verhält, mit dem zusätzlichen Unterschied, dass die Untergrenze (durch das Typsystem) garantiert 1 ist.
Base.StepRangeLen
— TypeStepRangeLen( ref::R, step::S, len, [offset=1]) where { R,S}
StepRangeLen{T,R,S}( ref::R, step::S, len, [offset=1]) where {T,R,S}
StepRangeLen{T,R,S,L}(ref::R, step::S, len, [offset=1]) where {T,R,S,L}
Ein Bereich r
, bei dem r[i]
Werte vom Typ T
erzeugt (im ersten Fall wird T
automatisch abgeleitet), parametrisiert durch einen ref
erenzwert, einen step
und die len
gth. Standardmäßig ist ref
der Startwert r[1]
, alternativ können Sie ihn als Wert von r[offset]
für einen anderen Index 1 <= offset <= len
angeben. Die Syntax a:b
oder a:b:c
, wobei einer von a
, b
oder c
Fließkommazahlen sind, erstellt einen StepRangeLen
.
Der 4. Typparameter L
erfordert mindestens Julia 1.7.
Base.logrange
— Functionlogrange(start, stop, length)
logrange(start, stop; length)
Konstruiere ein spezialisiertes Array, dessen Elemente logarithmisch zwischen den gegebenen Endpunkten verteilt sind. Das heißt, das Verhältnis aufeinanderfolgender Elemente ist konstant und wird aus der Länge berechnet.
Dies ist ähnlich wie geomspace
in Python. Im Gegensatz zu PowerRange
in Mathematica gibst du die Anzahl der Elemente an, nicht das Verhältnis. Im Gegensatz zu logspace
in Python und Matlab sind die start
- und stop
-Argumente immer die ersten und letzten Elemente des Ergebnisses, nicht Potenzen, die auf eine Basis angewendet werden.
Beispiele
julia> logrange(10, 4000, length=3)
3-element Base.LogRange{Float64, Base.TwicePrecision{Float64}}:
10.0, 200.0, 4000.0
julia> ans[2] ≈ sqrt(10 * 4000) # mittleres Element ist das geometrische Mittel
true
julia> range(10, 40, length=3)[2] ≈ (10 + 40)/2 # arithmetisches Mittel
true
julia> logrange(1f0, 32f0, 11)
11-element Base.LogRange{Float32, Float64}:
1.0, 1.41421, 2.0, 2.82843, 4.0, 5.65685, 8.0, 11.3137, 16.0, 22.6274, 32.0
julia> logrange(1, 1000, length=4) ≈ 10 .^ (0:3)
true
Siehe den LogRange
Typ für weitere Details.
Siehe auch range
für linear verteilte Punkte.
Diese Funktion erfordert mindestens Julia 1.11.
Base.LogRange
— TypeLogRange{T}(start, stop, len) <: AbstractVector{T}
Ein Bereich, dessen Elemente logarithmisch zwischen start
und stop
verteilt sind, wobei der Abstand durch len
gesteuert wird. Zurückgegeben von logrange
.
Wie bei LinRange
werden die ersten und letzten Elemente genau die angegebenen sein, aber Zwischenwerte können kleine Gleitkommafehler aufweisen. Diese werden unter Verwendung der Logarithmen der Endpunkte berechnet, die beim Erstellen gespeichert werden, oft in höherer Präzision als T
.
Beispiele
julia> logrange(1, 4, length=5)
5-element Base.LogRange{Float64, Base.TwicePrecision{Float64}}:
1.0, 1.41421, 2.0, 2.82843, 4.0
julia> Base.LogRange{Float16}(1, 4, 5)
5-element Base.LogRange{Float16, Float64}:
1.0, 1.414, 2.0, 2.828, 4.0
julia> logrange(1e-310, 1e-300, 11)[1:2:end]
6-element Vector{Float64}:
1.0e-310
9.999999999999974e-309
9.999999999999981e-307
9.999999999999988e-305
9.999999999999994e-303
1.0e-300
julia> prevfloat(1e-308, 5) == ans[2]
true
Beachten Sie, dass der ganzzahlige eltype T
nicht erlaubt ist. Verwenden Sie beispielsweise round.(Int, xs)
oder explizite Potenzen einer ganzzahligen Basis:
julia> xs = logrange(1, 512, 4)
4-element Base.LogRange{Float64, Base.TwicePrecision{Float64}}:
1.0, 8.0, 64.0, 512.0
julia> 2 .^ (0:3:9) |> println
[1, 8, 64, 512]
Dieser Typ erfordert mindestens Julia 1.11.
Base.:==
— Function==(x, y)
Generischer Gleichheitsoperator. Fällt zurück auf ===
. Sollte für alle Typen mit einem Konzept von Gleichheit implementiert werden, basierend auf dem abstrakten Wert, den eine Instanz repräsentiert. Zum Beispiel werden alle numerischen Typen nach ihrem numerischen Wert verglichen, unabhängig vom Typ. Strings werden als Zeichenfolgen verglichen, wobei die Kodierung ignoriert wird. Sammlungen desselben Typs vergleichen im Allgemeinen ihre Schlüsselsätze, und wenn diese ==
sind, vergleichen sie die Werte für jeden dieser Schlüssel und geben true zurück, wenn alle solchen Paare ==
sind. Andere Eigenschaften werden typischerweise nicht berücksichtigt (wie der genaue Typ).
Dieser Operator folgt den IEEE-Semantiken für Fließkommazahlen: 0.0 == -0.0
und NaN != NaN
.
Das Ergebnis ist vom Typ Bool
, es sei denn, einer der Operanden ist missing
, in diesem Fall wird missing
zurückgegeben (dreiwertige Logik). Sammlungen implementieren im Allgemeinen eine dreiwertige Logik ähnlich wie all
, wobei missing zurückgegeben wird, wenn einer der Operanden fehlende Werte enthält und alle anderen Paare gleich sind. Verwenden Sie isequal
oder ===
, um immer ein Bool
-Ergebnis zu erhalten.
Implementierung
Neue numerische Typen sollten diese Funktion für zwei Argumente des neuen Typs implementieren und den Vergleich mit anderen Typen, wo möglich, über Promotionsregeln handhaben.
isequal
fällt auf ==
zurück, sodass neue Methoden von ==
vom Dict
-Typ verwendet werden, um Schlüssel zu vergleichen. Wenn Ihr Typ als Schlüssel in einem Wörterbuch verwendet wird, sollte er daher auch hash
implementieren.
Wenn ein Typ ==
, isequal
und isless
definiert, sollte er auch <
implementieren, um die Konsistenz der Vergleiche sicherzustellen.
Base.:!=
— Function!=(x, y)
≠(x,y)
Ungleichheitsvergleichsoperator. Gibt immer die entgegengesetzte Antwort wie ==
zurück.
Implementierung
Neue Typen sollten dies im Allgemeinen nicht implementieren und stattdessen auf die Fallback-Definition !=(x,y) = !(x==y)
zurückgreifen.
Beispiele
julia> 3 != 2
true
julia> "foo" ≠ "foo"
false
!=(x)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von !=
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y != x
ist. Die zurückgegebene Funktion ist vom Typ Base.Fix2{typeof(!=)}
, die verwendet werden kann, um spezialisierte Methoden zu implementieren.
Diese Funktionalität erfordert mindestens Julia 1.2.
Base.:!==
— Function!==(x, y)
≢(x,y)
Gibt immer die entgegengesetzte Antwort wie ===
.
Beispiele
julia> a = [1, 2]; b = [1, 2];
julia> a ≢ b
true
julia> a ≢ a
false
Base.:<
— Function<(x, y)
Weniger-als-Vergleichsoperator. Fällt zurück auf isless
. Aufgrund des Verhaltens von Gleitkomma-NaN-Werten implementiert dieser Operator eine partielle Ordnung.
Implementierung
Neue Typen mit einer kanonischen partiellen Ordnung sollten diese Funktion für zwei Argumente des neuen Typs implementieren. Typen mit einer kanonischen totalen Ordnung sollten stattdessen isless
implementieren.
Siehe auch isunordered
.
Beispiele
julia> 'a' < 'b'
true
julia> "abc" < "abd"
true
julia> 5 < 3
false
<(x)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von <
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y < x
ist. Die zurückgegebene Funktion hat den Typ Base.Fix2{typeof(<)}
, der verwendet werden kann, um spezialisierte Methoden zu implementieren.
Diese Funktionalität erfordert mindestens Julia 1.2.
Base.:<=
— Function<=(x, y)
≤(x,y)
Weniger-als-oder-gleich Vergleichsoperator. Fällt zurück auf (x < y) | (x == y)
.
Beispiele
julia> 'a' <= 'b'
true
julia> 7 ≤ 7 ≤ 9
true
julia> "abc" ≤ "abc"
true
julia> 5 <= 3
false
<=(x)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von <=
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y <= x
ist. Die zurückgegebene Funktion ist vom Typ Base.Fix2{typeof(<=)}
, die verwendet werden kann, um spezialisierte Methoden zu implementieren.
Diese Funktionalität erfordert mindestens Julia 1.2.
Base.:>
— Function>(x, y)
Größer-als-Vergleichsoperator. Fällt zurück auf y < x
.
Implementierung
Im Allgemeinen sollten neue Typen <
anstelle dieser Funktion implementieren und sich auf die Rückfalldefinition >(x, y) = y < x
verlassen.
Beispiele
julia> 'a' > 'b'
false
julia> 7 > 3 > 1
true
julia> "abc" > "abd"
false
julia> 5 > 3
true
>(x)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von >
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y > x
ist. Die zurückgegebene Funktion hat den Typ Base.Fix2{typeof(>)}
, der verwendet werden kann, um spezialisierte Methoden zu implementieren.
Diese Funktionalität erfordert mindestens Julia 1.2.
Base.:>=
— Function>=(x, y)
≥(x,y)
Größer-als-oder-gleich Vergleichsoperator. Fällt zurück auf y <= x
.
Beispiele
julia> 'a' >= 'b'
false
julia> 7 ≥ 7 ≥ 3
true
julia> "abc" ≥ "abc"
true
julia> 5 >= 3
true
>=(x)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von >=
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y >= x
ist. Die zurückgegebene Funktion ist vom Typ Base.Fix2{typeof(>=)}
, die verwendet werden kann, um spezialisierte Methoden zu implementieren.
Diese Funktionalität erfordert mindestens Julia 1.2.
Base.cmp
— Functioncmp(x,y)
Gibt -1, 0 oder 1 zurück, je nachdem, ob x
kleiner, gleich oder größer als y
ist. Verwendet die totale Ordnung, die durch isless
implementiert ist.
Beispiele
julia> cmp(1, 2)
-1
julia> cmp(2, 1)
1
julia> cmp(2+im, 3-im)
ERROR: MethodError: no method matching isless(::Complex{Int64}, ::Complex{Int64})
[...]
cmp(<, x, y)
Gibt -1, 0 oder 1 zurück, je nachdem, ob x
kleiner, gleich oder größer als y
ist. Das erste Argument gibt eine Funktion für den Vergleich "kleiner als" an, die verwendet werden soll.
cmp(a::AbstractString, b::AbstractString) -> Int
Vergleiche zwei Strings. Gib 0
zurück, wenn beide Strings die gleiche Länge haben und das Zeichen an jedem Index in beiden Strings gleich ist. Gib -1
zurück, wenn a
ein Präfix von b
ist oder wenn a
alphabetisch vor b
kommt. Gib 1
zurück, wenn b
ein Präfix von a
ist oder wenn b
alphabetisch vor a
kommt (technisch gesehen, lexikografische Reihenfolge nach Unicode-Codepunkten).
Beispiele
julia> cmp("abc", "abc")
0
julia> cmp("ab", "abc")
-1
julia> cmp("abc", "ab")
1
julia> cmp("ab", "ac")
-1
julia> cmp("ac", "ab")
1
julia> cmp("α", "a")
1
julia> cmp("b", "β")
-1
Base.:~
— FunctionBase.:&
— Functionx & y
Bitweises und. Implementiert dreiwertige Logik, gibt missing
zurück, wenn ein Operand missing
ist und der andere true
. Fügen Sie Klammern für die Funktionsanwendungsform hinzu: (&)(x, y)
.
Beispiele
julia> 4 & 10
0
julia> 4 & 12
4
julia> true & missing
missing
julia> false & missing
false
Base.:|
— Functionx | y
Bitweises Oder. Implementiert dreiwertige Logik, gibt missing
zurück, wenn ein Operand missing
und der andere false
ist.
Beispiele
julia> 4 | 10
14
julia> 4 | 1
5
julia> true | missing
true
julia> false | missing
missing
Base.xor
— Functionxor(x, y)
⊻(x, y)
Bitweises exklusives Oder von x
und y
. Implementiert dreiwertige Logik, gibt missing
zurück, wenn eines der Argumente missing
ist.
Die Infix-Operation a ⊻ b
ist ein Synonym für xor(a,b)
, und ⊻
kann durch Tab-Vervollständigung von \xor
oder \veebar
in der Julia REPL eingegeben werden.
Beispiele
julia> xor(true, false)
true
julia> xor(true, true)
false
julia> xor(true, missing)
missing
julia> false ⊻ false
false
julia> [true; true; false] .⊻ [true; false; false]
3-element BitVector:
0
1
0
Base.nand
— Functionnand(x, y)
⊼(x, y)
Bitweises nand (nicht und) von x
und y
. Implementiert dreiwertige Logik, gibt missing
zurück, wenn eines der Argumente missing
ist.
Die Infix-Operation a ⊼ b
ist ein Synonym für nand(a,b)
, und ⊼
kann durch Tab-Vervollständigung von \nand
oder \barwedge
in der Julia REPL eingegeben werden.
Beispiele
julia> nand(true, false)
true
julia> nand(true, true)
false
julia> nand(true, missing)
missing
julia> false ⊼ false
true
julia> [true; true; false] .⊼ [true; false; false]
3-element BitVector:
0
1
1
Base.nor
— Functionnor(x, y)
⊽(x, y)
Bitweises nor (nicht oder) von x
und y
. Implementiert dreiwertige Logik, gibt missing
zurück, wenn eines der Argumente missing
ist und das andere nicht true
.
Die Infix-Operation a ⊽ b
ist ein Synonym für nor(a,b)
, und ⊽
kann durch Tab-Vervollständigung von \nor
oder \barvee
in der Julia REPL eingegeben werden.
Beispiele
julia> nor(true, false)
false
julia> nor(true, true)
false
julia> nor(true, missing)
false
julia> false ⊽ false
true
julia> false ⊽ missing
missing
julia> [true; true; false] .⊽ [true; false; false]
3-element BitVector:
0
0
1
Base.:!
— Function!(x)
Boolesches Nicht. Implementiert dreiwertige Logik, gibt missing
zurück, wenn x
missing
ist.
Siehe auch ~
für bitweises Nicht.
Beispiele
julia> !true
false
julia> !false
true
julia> !missing
missing
julia> .![true false true]
1×3 BitMatrix:
0 1 0
!f::Funktion
Prädikatfunktion Negation: Wenn das Argument von !
eine Funktion ist, gibt es eine zusammengesetzte Funktion zurück, die die boolesche Negation von f
berechnet.
Siehe auch ∘
.
Beispiele
julia> str = "∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε"
"∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε"
julia> filter(isletter, str)
"εδxyδfxfyε"
julia> filter(!isletter, str)
"∀ > 0, ∃ > 0: |-| < ⇒ |()-()| < "
Ab Julia 1.9 gibt !f
eine ComposedFunction
zurück, anstatt einer anonymen Funktion.
&&
— Keywordx && y
Kurzschluss-Boolean-UND.
Siehe auch &
, den ternären Operator ? :
und den Handbuchabschnitt über Kontrollfluss.
Beispiele
julia> x = 3;
julia> x > 1 && x < 10 && x isa Int
true
julia> x < 0 && error("erwartetes positives x")
false
||
— Keywordx || y
Kurzschluss-Boolean-ODER.
Beispiele
julia> pi < 3 || ℯ < 3
true
julia> false || true || println("keines ist wahr!")
true
Mathematical Functions
Base.isapprox
— Functionisapprox(x, y; atol::Real=0, rtol::Real=atol>0 ? 0 : √eps, nans::Bool=false[, norm::Function])
Ungenaue Gleichheitsvergleiche. Zwei Zahlen vergleichen sich gleich, wenn ihre relative Distanz oder ihre absolute Distanz innerhalb der Toleranzgrenzen liegt: isapprox
gibt true
zurück, wenn norm(x-y) <= max(atol, rtol*max(norm(x), norm(y)))
. Der Standardwert für atol
(absolute Toleranz) ist null und der Standardwert für rtol
(relative Toleranz) hängt von den Typen von x
und y
ab. Das Schlüsselwortargument nans
bestimmt, ob NaN-Werte als gleich betrachtet werden oder nicht (Standardwert ist false).
Für reale oder komplexe Gleitkommawerte, wenn kein atol > 0
angegeben ist, ist der Standardwert für rtol
die Quadratwurzel von eps
des Typs von x
oder y
, je nachdem, welcher größer ist (am wenigsten präzise). Dies entspricht der Anforderung, dass etwa die Hälfte der signifikanten Ziffern gleich sein muss. Andernfalls, z. B. für ganzzahlige Argumente oder wenn ein atol > 0
angegeben ist, ist der Standardwert für rtol
null.
Das Schlüsselwort norm
hat standardmäßig abs
für numerische (x,y)
und LinearAlgebra.norm
für Arrays (wo eine alternative norm
-Wahl manchmal nützlich ist). Wenn x
und y
Arrays sind, fällt der Vergleich zurück auf die Überprüfung, ob alle Elemente von x
und y komponentenweise ungefähr gleich sind, wenn
norm(x-y)nicht endlich ist (d. h.
±Infoder
NaN`).
Der binäre Operator ≈
ist äquivalent zu isapprox
mit den Standardargumenten, und x ≉ y
ist äquivalent zu !isapprox(x,y)
.
Beachten Sie, dass x ≈ 0
(d. h. der Vergleich mit null unter den Standardtoleranzen) äquivalent zu x == 0
ist, da der Standardwert für atol
0
ist. In solchen Fällen sollten Sie entweder eine geeignete atol
angeben (oder norm(x) ≤ atol
verwenden) oder Ihren Code umstellen (z. B. x ≈ y
anstelle von x - y ≈ 0
verwenden). Es ist nicht möglich, automatisch eine von null verschiedene atol
auszuwählen, da sie von der gesamten Skalierung (den "Einheiten") Ihres Problems abhängt: Zum Beispiel ist in x - y ≈ 0
atol=1e-9
eine absurd kleine Toleranz, wenn x
der Radius der Erde in Metern ist, aber eine absurd große Toleranz, wenn x
der Radius eines Wasserstoffatoms in Metern ist.
Das Übergeben des Schlüsselwortarguments norm
beim Vergleichen numerischer (nicht-array) Argumente erfordert Julia 1.6 oder höher.
Beispiele
julia> isapprox(0.1, 0.15; atol=0.05)
true
julia> isapprox(0.1, 0.15; rtol=0.34)
true
julia> isapprox(0.1, 0.15; rtol=0.33)
false
julia> 0.1 + 1e-10 ≈ 0.1
true
julia> 1e-10 ≈ 0
false
julia> isapprox(1e-10, 0, atol=1e-8)
true
julia> isapprox([10.0^9, 1.0], [10.0^9, 2.0]) # using `norm`
true
isapprox(x; kwargs...) / ≈(x; kwargs...)
Erstellen Sie eine Funktion, die ihr Argument mit x
unter Verwendung von ≈
vergleicht, d.h. eine Funktion, die äquivalent zu y -> y ≈ x
ist.
Die unterstützten Schlüsselwortargumente sind die gleichen wie die in der 2-Argumente isapprox
.
Diese Methode erfordert Julia 1.5 oder später.
Base.sin
— Methodsin(x)
Berechne den Sinus von x
, wobei x
in Bogenmaß ist.
Siehe auch sind
, sinpi
, sincos
, cis
, asin
.
Beispiele
julia> round.(sin.(range(0, 2pi, length=9)'), digits=3)
1×9 Matrix{Float64}:
0.0 0.707 1.0 0.707 0.0 -0.707 -1.0 -0.707 -0.0
julia> sind(45)
0.7071067811865476
julia> sinpi(1/4)
0.7071067811865475
julia> round.(sincos(pi/6), digits=3)
(0.5, 0.866)
julia> round(cis(pi/6), digits=3)
0.866 + 0.5im
julia> round(exp(im*pi/6), digits=3)
0.866 + 0.5im
Base.cos
— MethodBase.Math.sincos
— Methodsincos(x)
Berechnet gleichzeitig den Sinus und Kosinus von x
, wobei x
in Bogenmaß ist, und gibt ein Tupel (sinus, kosinus)
zurück.
Base.tan
— Methodtan(x)
Berechne den Tangens von x
, wobei x
in Bogenmaß ist.
Base.Math.sind
— Functionsind(x)
Berechne den Sinus von x
, wobei x
in Grad ist. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.cosd
— Functioncosd(x)
Berechne den Kosinus von x
, wobei x
in Grad ist. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.tand
— Functiontand(x)
Berechne den Tangens von x
, wobei x
in Grad ist. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.sincosd
— Functionsincosd(x)
Berechne gleichzeitig den Sinus und Kosinus von x
, wobei x
in Grad angegeben ist.
Diese Funktion erfordert mindestens Julia 1.3.
Base.Math.sinpi
— Functionsinpi(x)
Berechne $\sin(\pi x)$ genauer als sin(pi*x)
, insbesondere für große x
.
Base.Math.cospi
— Functioncospi(x)
Berechne $\cos(\pi x)$ genauer als cos(pi*x)
, insbesondere für große x
.
Base.Math.tanpi
— Functiontanpi(x)
Berechne $\tan(\pi x)$ genauer als tan(pi*x)
, insbesondere für große x
.
Diese Funktion erfordert mindestens Julia 1.10.
Base.Math.sincospi
— Functionsincospi(x)
Berechnet gleichzeitig sinpi(x)
und cospi(x)
(den Sinus und Kosinus von π*x
, wobei x
in Bogenmaß ist) und gibt ein Tupel (sinus, kosinus)
zurück.
Diese Funktion erfordert Julia 1.6 oder höher.
Base.sinh
— Methodsinh(x)
Berechne den hyperbolischen Sinus von x
.
Base.cosh
— Methodcosh(x)
Berechne den hyperbolischen Kosinus von x
.
Base.tanh
— Methodtanh(x)
Berechne den hyperbolischen Tangens von x
.
Beispiele
julia> tanh.(-3:3f0) # Hier ist 3f0 ein Float32
7-element Vector{Float32}:
-0.9950548
-0.9640276
-0.7615942
0.0
0.7615942
0.9640276
0.9950548
julia> tan.(im .* (1:3))
3-element Vector{ComplexF64}:
0.0 + 0.7615941559557649im
0.0 + 0.9640275800758169im
0.0 + 0.9950547536867306im
Base.asin
— Methodasin(x)
Berechne den inversen Sinus von x
, wobei die Ausgabe in Bogenmaß erfolgt.
Siehe auch asind
für die Ausgabe in Grad.
Beispiele
julia> asin.((0, 1/2, 1))
(0.0, 0.5235987755982989, 1.5707963267948966)
julia> asind.((0, 1/2, 1))
(0.0, 30.000000000000004, 90.0)
Base.acos
— Methodacos(x)
Berechne den inversen Kosinus von x
, wobei die Ausgabe in Bogenmaß erfolgt.
Base.atan
— Methodatan(y)
atan(y, x)
Berechne den inversen Tangens von y
oder y/x
, jeweils.
Für ein reales Argument ist dies der Winkel in Bogenmaß zwischen der positiven x-Achse und dem Punkt (1, y), wobei ein Wert im Intervall $[-\pi/2, \pi/2]$ zurückgegeben wird.
Für zwei Argumente ist dies der Winkel in Bogenmaß zwischen der positiven x-Achse und dem Punkt (x, y), wobei ein Wert im Intervall $[-\pi, \pi]$ zurückgegeben wird. Dies entspricht einer standardmäßigen atan2
Funktion. Beachte, dass konventionell atan(0.0,x)
als $\pi$ definiert ist und atan(-0.0,x)
als $-\pi$, wenn x < 0
.
Siehe auch atand
für Grad.
Beispiele
julia> rad2deg(atan(-1/√3))
-30.000000000000004
julia> rad2deg(atan(-1, √3))
-30.000000000000004
julia> rad2deg(atan(1, -√3))
150.0
Base.Math.asind
— Functionasind(x)
Berechne den inversen Sinus von x
, wobei die Ausgabe in Grad erfolgt. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.acosd
— Functionacosd(x)
Berechne den inversen Kosinus von x
, wobei die Ausgabe in Grad erfolgt. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.atand
— Functionatand(y)
atand(y,x)
Berechne den inversen Tangens von y
oder y/x
, jeweils, wobei die Ausgabe in Grad erfolgt.
Die Methode mit einem Argument unterstützt ab Julia 1.7 quadratische Matrixargumente.
Base.Math.sec
— Methodsec(x)
Berechne die Sekante von x
, wobei x
in Bogenmaß ist.
Base.Math.csc
— Methodcsc(x)
Berechne die Kosekans von x
, wobei x
in Bogenmaß ist.
Base.Math.cot
— Methodcot(x)
Berechne den Kotangens von x
, wobei x
in Bogenmaß ist.
Base.Math.secd
— Functionsecd(x)
Berechne die Sekante von x
, wobei x
in Grad ist.
Base.Math.cscd
— Functioncscd(x)
Berechne die Kosekans von x
, wobei x
in Grad ist.
Base.Math.cotd
— Functioncotd(x)
Berechne den Kotangens von x
, wobei x
in Grad ist.
Base.Math.asec
— Methodasec(x)
Berechne den inversen Sekanten von x
, wobei die Ausgabe in Bogenmaß erfolgt.
Base.Math.acsc
— Methodacsc(x)
Berechne den inversen Kosekans von x
, wobei die Ausgabe in Bogenmaß erfolgt.
Base.Math.acot
— Methodacot(x)
Berechne den inversen Kotangens von x
, wobei die Ausgabe in Bogenmaß erfolgt.
Base.Math.asecd
— Functionasecd(x)
Berechne den inversen Sekanten von x
, wobei die Ausgabe in Grad erfolgt. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.acscd
— Functionacscd(x)
Berechne den inversen Kosekans von x
, wobei die Ausgabe in Grad erfolgt. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.acotd
— Functionacotd(x)
Berechne den inversen Kotangens von x
, wobei die Ausgabe in Grad erfolgt. Wenn x
eine Matrix ist, muss x
eine quadratische Matrix sein.
Matrixargumente erfordern Julia 1.7 oder höher.
Base.Math.sech
— Methodsech(x)
Berechne die hyperbolische Sekante von x
.
Base.Math.csch
— Methodcsch(x)
Berechne die hyperbolische Kosekans von x
.
Base.Math.coth
— Methodcoth(x)
Berechne den hyperbolischen Kotangens von x
.
Base.asinh
— Methodasinh(x)
Berechne den inversen hyperbolischen Sinus von x
.
Base.acosh
— Methodacosh(x)
Berechne den inversen hyperbolischen Kosinus von x
.
Base.atanh
— Methodatanh(x)
Berechne den inversen hyperbolischen Tangens von x
.
Base.Math.asech
— Methodasech(x)
Berechne den inversen hyperbolischen Sekanten von x
.
Base.Math.acsch
— Methodacsch(x)
Berechne den inversen hyperbolischen Kosekans von x
.
Base.Math.acoth
— Methodacoth(x)
Berechne den inversen hyperbolischen Kotangens von x
.
Base.Math.sinc
— Functionsinc(x)
Berechne die normalisierte Sinc-Funktion $\operatorname{sinc}(x) = \sin(\pi x) / (\pi x)$, wenn $x \neq 0$, und $1$, wenn $x = 0$.
Siehe auch cosc
, ihre Ableitung.
Base.Math.cosc
— Functioncosc(x)
Berechne $\cos(\pi x) / x - \sin(\pi x) / (\pi x^2)$, wenn $x \neq 0$, und $0$, wenn $x = 0$. Dies ist die Ableitung von sinc(x)
.
Siehe auch sinc
.
Base.Math.deg2rad
— Functiondeg2rad(x)
Konvertiere x
von Grad in Bogenmaß.
Beispiele
julia> deg2rad(90)
1.5707963267948966
Base.Math.rad2deg
— FunctionBase.Math.hypot
— Functionhypot(x, y)
Berechne die Hypotenuse $\sqrt{|x|^2+|y|^2}$ und vermeide Überlauf und Unterlauf.
Dieser Code ist eine Implementierung des Algorithmus, der in: An Improved Algorithm for hypot(a,b)
von Carlos F. Borges beschrieben ist. Der Artikel ist online auf arXiv unter dem Link https://arxiv.org/abs/1904.09481 verfügbar.
hypot(x...)
Berechne die Hypotenuse $\sqrt{\sum |x_i|^2}$ und vermeide Überlauf und Unterlauf.
Siehe auch norm
in der LinearAlgebra
Standardbibliothek.
Beispiele
julia> a = Int64(10)^10;
julia> hypot(a, a)
1.4142135623730951e10
julia> √(a^2 + a^2) # a^2 überläuft
ERROR: DomainError with -2.914184810805068e18:
sqrt wurde mit einem negativen reellen Argument aufgerufen, gibt aber nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuche sqrt(Complex(x)).
Stacktrace:
[...]
julia> hypot(3, 4im)
5.0
julia> hypot(-5.7)
5.7
julia> hypot(3, 4im, 12.0)
13.0
julia> using LinearAlgebra
julia> norm([a, a, a, a]) == hypot(a, a, a, a)
true
Base.log
— Methodlog(x)
Berechnet den natürlichen Logarithmus von x
.
Wirft DomainError
für negative Real
Argumente. Verwenden Sie komplexe Argumente, um komplexe Ergebnisse zu erhalten. Hat einen Astschnitt entlang der negativen reellen Achse, für den -0.0im
als unterhalb der Achse betrachtet wird.
Siehe auch ℯ
, log1p
, log2
, log10
.
Beispiele
julia> log(2)
0.6931471805599453
julia> log(-3)
ERROR: DomainError with -3.0:
log wurde mit einem negativen reellen Argument aufgerufen, gibt jedoch nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuchen Sie log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
julia> log(-3 + 0im)
1.0986122886681098 + 3.141592653589793im
julia> log(-3 - 0.0im)
1.0986122886681098 - 3.141592653589793im
julia> log.(exp.(-1:1))
3-element Vector{Float64}:
-1.0
0.0
1.0
Base.log
— Methodlog(b,x)
Berechnet den Logarithmus von x
zur Basis b
. Wirft DomainError
für negative Real
Argumente.
Beispiele
julia> log(4,8)
1.5
julia> log(4,2)
0.5
julia> log(-2, 3)
ERROR: DomainError mit -2.0:
log wurde mit einem negativen reellen Argument aufgerufen, gibt jedoch nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuchen Sie log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
julia> log(2, -3)
ERROR: DomainError mit -3.0:
log wurde mit einem negativen reellen Argument aufgerufen, gibt jedoch nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuchen Sie log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
Base.log2
— Functionlog2(x)
Berechnet den Logarithmus von x
zur Basis 2. Wirft DomainError
für negative Real
Argumente.
Siehe auch: exp2
, ldexp
, ispow2
.
Beispiele
julia> log2(4)
2.0
julia> log2(10)
3.321928094887362
julia> log2(-2)
ERROR: DomainError mit -2.0:
log2 wurde mit einem negativen reellen Argument aufgerufen, gibt aber nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuchen Sie log2(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(f::Symbol, x::Float64) at ./math.jl:31
[...]
julia> log2.(2.0 .^ (-1:1))
3-element Vector{Float64}:
-1.0
0.0
1.0
Base.log10
— Functionlog10(x)
Berechne den Logarithmus von x
zur Basis 10. Wirft DomainError
für negative Real
Argumente.
Beispiele
julia> log10(100)
2.0
julia> log10(2)
0.3010299956639812
julia> log10(-2)
ERROR: DomainError mit -2.0:
log10 wurde mit einem negativen reellen Argument aufgerufen, gibt aber nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuche log10(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(f::Symbol, x::Float64) at ./math.jl:31
[...]
Base.log1p
— Functionlog1p(x)
Genauer natürlicher Logarithmus von 1+x
. Wirft DomainError
für Real
Argumente kleiner als -1.
Beispiele
julia> log1p(-0.5)
-0.6931471805599453
julia> log1p(0)
0.0
julia> log1p(-2)
ERROR: DomainError mit -2.0:
log1p wurde mit einem reellen Argument < -1 aufgerufen, gibt aber nur ein komplexes Ergebnis zurück, wenn es mit einem komplexen Argument aufgerufen wird. Versuchen Sie log1p(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
Base.Math.frexp
— Functionfrexp(val)
Gibt (x,exp)
zurück, so dass x
eine Größe im Intervall $[1/2, 1)$ oder 0 hat, und val
gleich $x \times 2^{exp}$ ist.
Siehe auch significand
, exponent
, ldexp
.
Beispiele
julia> frexp(6.0)
(0.75, 3)
julia> significand(6.0), exponent(6.0) # Intervall [1, 2) stattdessen
(1.5, 2)
julia> frexp(0.0), frexp(NaN), frexp(-Inf) # Exponent würde einen Fehler geben
((0.0, 0), (NaN, 0), (-Inf, 0))
Base.exp
— Methodexp(x)
Berechne die natürliche Basisexponentialfunktion von x
, mit anderen Worten $ℯ^x$.
Siehe auch exp2
, exp10
und cis
.
Beispiele
julia> exp(1.0)
2.718281828459045
julia> exp(im * pi) ≈ cis(pi)
true
Base.exp2
— Functionexp2(x)
Berechne die Basis-2-Exponentialfunktion von x
, mit anderen Worten $2^x$.
Beispiele
julia> exp2(5)
32.0
julia> 2^5
32
julia> exp2(63) > typemax(Int)
true
Base.exp10
— Functionexp10(x)
Berechne die Basis 10 Exponentialfunktion von x
, mit anderen Worten $10^x$.
Beispiele
julia> exp10(2)
100.0
julia> 10^2
100
Base.Math.ldexp
— FunctionBase.Math.modf
— Functionmodf(x)
Gibt ein Tupel (fpart, ipart)
der Bruch- und Ganzzahlteile einer Zahl zurück. Beide Teile haben das gleiche Vorzeichen wie das Argument.
Beispiele
julia> modf(3.5)
(0.5, 3.0)
julia> modf(-3.5)
(-0.5, -3.0)
Base.expm1
— Functionexpm1(x)
Berechnet genau $e^x-1$. Es vermeidet den Verlust an Präzision, der bei der direkten Auswertung von exp(x)-1 für kleine Werte von x auftritt.
Beispiele
julia> expm1(1e-16)
1.0e-16
julia> exp(1e-16) - 1
0.0
Base.round
— Functionround([T,] x, [r::RoundingMode])
round(x, [r::RoundingMode]; digits::Integer=0, base = 10)
round(x, [r::RoundingMode]; sigdigits::Integer, base = 10)
Rundet die Zahl x
.
Ohne Schlüsselwortargumente wird x
auf einen ganzzahligen Wert gerundet, wobei ein Wert vom Typ T
zurückgegeben wird, oder vom gleichen Typ wie x
, wenn kein T
angegeben ist. Ein InexactError
wird ausgelöst, wenn der Wert nicht durch T
darstellbar ist, ähnlich wie bei convert
.
Wenn das Schlüsselwortargument digits
angegeben ist, wird auf die angegebene Anzahl von Ziffern nach dem Dezimalpunkt (oder davor, wenn negativ) in der Basis base
gerundet.
Wenn das Schlüsselwortargument sigdigits
angegeben ist, wird auf die angegebene Anzahl von signifikanten Ziffern in der Basis base
gerundet.
Der RoundingMode
r
steuert die Richtung des Rundens; der Standard ist RoundNearest
, das auf die nächste ganze Zahl rundet, wobei bei Gleichständen (Bruchwerte von 0.5) auf die nächste gerade ganze Zahl gerundet wird. Beachten Sie, dass round
falsche Ergebnisse liefern kann, wenn der globale Rundungsmodus geändert wird (siehe rounding
).
Beim Runden auf einen Fließkommatyp wird auf ganze Zahlen gerundet, die von diesem Typ (und Inf) darstellbar sind, anstatt auf echte ganze Zahlen. Inf wird als eine ulp größer als das floatmax(T)
behandelt, um "nächste" zu bestimmen, ähnlich wie bei convert
.
Beispiele
julia> round(1.7)
2.0
julia> round(Int, 1.7)
2
julia> round(1.5)
2.0
julia> round(2.5)
2.0
julia> round(pi; digits=2)
3.14
julia> round(pi; digits=3, base=2)
3.125
julia> round(123.456; sigdigits=2)
120.0
julia> round(357.913; sigdigits=4, base=2)
352.0
julia> round(Float16, typemax(UInt128))
Inf16
julia> floor(Float16, typemax(UInt128))
Float16(6.55e4)
!!! Hinweis Das Runden auf angegebene Ziffern in Basen, die nicht 2 sind, kann ungenau sein, wenn mit binären Fließkommazahlen gearbeitet wird. Zum Beispiel ist der Float64
Wert, der durch 1.15
dargestellt wird, tatsächlich weniger als 1.15, wird jedoch auf 1.2 gerundet. Zum Beispiel:
julia> x = 1.15
1.15
julia> big(1.15)
1.149999999999999911182158029987476766109466552734375
julia> x < 115//100
true
julia> round(x, digits=1)
1.2
```
# Erweiterungen
Um `round` auf neue numerische Typen zu erweitern, ist es typischerweise ausreichend, `Base.round(x::NewType, r::RoundingMode)` zu definieren.
Base.Rounding.RoundingMode
— TypeRoundingMode
Ein Typ, der verwendet wird, um den Rundungsmodus von Gleitkommaoperationen (über die Funktionen rounding
/setrounding
) zu steuern, oder als optionale Argumente für das Runden auf die nächste ganze Zahl (über die Funktion round
).
Derzeit unterstützte Rundungsmodi sind:
RoundNearest
(Standard)RoundNearestTiesAway
RoundNearestTiesUp
RoundToZero
RoundFromZero
RoundUp
RoundDown
RoundFromZero
erfordert mindestens Julia 1.9. Frühere Versionen unterstützen RoundFromZero
nur für BigFloat
s.
Base.Rounding.RoundNearest
— ConstantRoundNearest
Der Standard-Rundungsmodus. Rundet auf die nächste ganze Zahl, wobei bei Gleichständen (Bruchwerte von 0,5) auf die nächste gerade Zahl gerundet wird.
Base.Rounding.RoundNearestTiesAway
— ConstantRoundNearestTiesAway
Rundet auf die nächste ganze Zahl, wobei bei Gleichständen von null weg gerundet wird (C/C++ round
Verhalten).
Base.Rounding.RoundNearestTiesUp
— ConstantRoundNearestTiesUp
Rundet auf die nächste ganze Zahl, wobei bei Gleichständen auf positive Unendlichkeit gerundet wird (Verhalten von Java/JavaScript round
).
Base.Rounding.RoundToZero
— ConstantBase.Rounding.RoundFromZero
— ConstantRoundFromZero
Rundet von null weg.
RoundFromZero
erfordert mindestens Julia 1.9. Frühere Versionen unterstützen RoundFromZero
nur für BigFloat
s.
Beispiele
julia> BigFloat("1.0000000000000001", 5, RoundFromZero)
1.06
Base.Rounding.RoundUp
— ConstantBase.Rounding.RoundDown
— ConstantBase.round
— Methodround(z::Complex[, RoundingModeReal, [RoundingModeImaginary]])
round(z::Complex[, RoundingModeReal, [RoundingModeImaginary]]; digits=0, base=10)
round(z::Complex[, RoundingModeReal, [RoundingModeImaginary]]; sigdigits, base=10)
Gibt den nächstgelegenen ganzzahligen Wert des gleichen Typs wie der komplexe Wert z
zurück, wobei bei Gleichständen die angegebenen RoundingMode
s verwendet werden. Der erste RoundingMode
wird zum Runden der reellen Komponenten verwendet, während der zweite zum Runden der imaginären Komponenten verwendet wird.
RoundingModeReal
und RoundingModeImaginary
standardmäßig auf RoundNearest
, das auf die nächste ganze Zahl rundet, wobei Gleichstände (Bruchwerte von 0,5) auf die nächste gerade ganze Zahl gerundet werden.
Beispiele
julia> round(3.14 + 4.5im)
3.0 + 4.0im
julia> round(3.14 + 4.5im, RoundUp, RoundNearestTiesUp)
4.0 + 5.0im
julia> round(3.14159 + 4.512im; digits = 1)
3.1 + 4.5im
julia> round(3.14159 + 4.512im; sigdigits = 3)
3.14 + 4.51im
Base.ceil
— Functionceil([T,] x)
ceil(x; digits::Integer= [, basis = 10])
ceil(x; sigdigits::Integer= [, basis = 10])
ceil(x)
gibt den nächstgelegenen ganzzahligen Wert des gleichen Typs wie x
zurück, der größer oder gleich x
ist.
ceil(T, x)
konvertiert das Ergebnis in den Typ T
und wirft einen InexactError
, wenn der gerundete Wert nicht als T
darstellbar ist.
Die Schlüsselwörter digits
, sigdigits
und basis
funktionieren wie bei round
.
Um ceil
für einen neuen Typ zu unterstützen, definiere Base.round(x::NewType, ::RoundingMode{:Up})
.
Base.floor
— Functionfloor([T,] x)
floor(x; digits::Integer= [, basis = 10])
floor(x; sigdigits::Integer= [, basis = 10])
floor(x)
gibt den nächstgelegenen ganzzahligen Wert des gleichen Typs wie x
zurück, der kleiner oder gleich x
ist.
floor(T, x)
konvertiert das Ergebnis in den Typ T
und wirft einen InexactError
, wenn der gerundete Wert nicht als T
darstellbar ist.
Die Schlüsselwörter digits
, sigdigits
und basis
funktionieren wie bei round
.
Um floor
für einen neuen Typ zu unterstützen, definiere Base.round(x::NewType, ::RoundingMode{:Down})
.
Base.trunc
— Functiontrunc([T,] x)
trunc(x; digits::Integer= [, basis = 10])
trunc(x; sigdigits::Integer= [, basis = 10])
trunc(x)
gibt den nächstgelegenen ganzzahligen Wert des gleichen Typs wie x
zurück, dessen absoluter Wert kleiner oder gleich dem absoluten Wert von x
ist.
trunc(T, x)
konvertiert das Ergebnis in den Typ T
und wirft einen InexactError
, wenn der truncierte Wert nicht als T
darstellbar ist.
Die Schlüsselwörter digits
, sigdigits
und basis
funktionieren wie bei round
.
Um trunc
für einen neuen Typ zu unterstützen, definiere Base.round(x::NewType, ::RoundingMode{:ToZero})
.
Siehe auch: %
, floor
, unsigned
, unsafe_trunc
.
Beispiele
julia> trunc(2.22)
2.0
julia> trunc(-2.22, digits=1)
-2.2
julia> trunc(Int, -2.22)
-2
Base.unsafe_trunc
— Functionunsafe_trunc(T, x)
Gibt den nächstgelegenen ganzzahligen Wert des Typs T
zurück, dessen absoluter Wert kleiner oder gleich dem absoluten Wert von x
ist. Wenn der Wert nicht durch T
darstellbar ist, wird ein willkürlicher Wert zurückgegeben. Siehe auch trunc
.
Beispiele
julia> unsafe_trunc(Int, -2.2)
-2
julia> unsafe_trunc(Int, NaN)
-9223372036854775808
Base.min
— Functionmin(x, y, ...)
Gibt das Minimum der Argumente zurück, bezogen auf isless
. Wenn eines der Argumente missing
ist, wird missing
zurückgegeben. Siehe auch die Funktion minimum
, um das minimale Element aus einer Sammlung zu entnehmen.
Beispiele
julia> min(2, 5, 1)
1
julia> min(4, missing, 6)
missing
Base.max
— Functionmax(x, y, ...)
Gibt das Maximum der Argumente zurück, bezogen auf isless
. Wenn eines der Argumente missing
ist, wird missing
zurückgegeben. Siehe auch die Funktion maximum
, um das maximale Element aus einer Sammlung zu entnehmen.
Beispiele
julia> max(2, 5, 1)
5
julia> max(5, missing, 6)
missing
Base.minmax
— Functionminmax(x, y)
Gibt (min(x,y), max(x,y))
zurück.
Siehe auch extrema
, das (minimum(x), maximum(x))
zurückgibt.
Beispiele
julia> minmax('c','b')
('b', 'c')
Base.clamp
— Functionclamp(x, lo, hi)
Gibt x
zurück, wenn lo <= x <= hi
. Wenn x > hi
, wird hi
zurückgegeben. Wenn x < lo
, wird lo
zurückgegeben. Die Argumente werden auf einen gemeinsamen Typ befördert.
missing
als erstes Argument erfordert mindestens Julia 1.3.
Beispiele
julia> clamp.([pi, 1.0, big(10)], 2.0, 9.0)
3-element Vector{BigFloat}:
3.141592653589793238462643383279502884197169399375105820974944592307816406286198
2.0
9.0
julia> clamp.([11, 8, 5], 10, 6) # ein Beispiel, bei dem lo > hi
3-element Vector{Int64}:
6
6
10
clamp(x, T)::T
Begrenze x
zwischen typemin(T)
und typemax(T)
und konvertiere das Ergebnis in den Typ T
.
Siehe auch trunc
.
Beispiele
julia> clamp(200, Int8)
127
julia> clamp(-200, Int8)
-128
julia> trunc(Int, 4pi^2)
39
clamp(x::Integer, r::AbstractUnitRange)
Klemme x
so, dass es im Bereich r
liegt.
Diese Methode erfordert mindestens Julia 1.6.
Base.clamp!
— Functionclamp!(array::AbstractArray, lo, hi)
Werte in array
auf den angegebenen Bereich beschränken, in-place. Siehe auch clamp
.
missing
-Einträge in array
erfordern mindestens Julia 1.3.
Beispiele
julia> row = collect(-4:4)';
julia> clamp!(row, 0, Inf)
1×9 adjoint(::Vector{Int64}) mit eltype Int64:
0 0 0 0 0 1 2 3 4
julia> clamp.((-4:4)', 0, Inf)
1×9 Matrix{Float64}:
0.0 0.0 0.0 0.0 0.0 1.0 2.0 3.0 4.0
Base.abs
— Functionabs(x)
Der Betrag von x
.
Wenn abs
auf vorzeichenbehaftete Ganzzahlen angewendet wird, kann ein Überlauf auftreten, der zur Rückgabe eines negativen Wertes führt. Dieser Überlauf tritt nur auf, wenn abs
auf den minimal darstellbaren Wert einer vorzeichenbehafteten Ganzzahl angewendet wird. Das heißt, wenn x == typemin(typeof(x))
, dann ist abs(x) == x < 0
, nicht -x
, wie man erwarten könnte.
Siehe auch: abs2
, unsigned
, sign
.
Beispiele
julia> abs(-3)
3
julia> abs(1 + im)
1.4142135623730951
julia> abs.(Int8[-128 -127 -126 0 126 127]) # Überlauf bei typemin(Int8)
1×6 Matrix{Int8}:
-128 127 126 0 126 127
julia> maximum(abs, [1, -2, 3, -4])
4
Base.Checked
— ModuleÜberprüft
Das Überprüft-Modul bietet arithmetische Funktionen für die integrierten vorzeichenbehafteten und vorzeichenlosen Ganzzahltypen, die einen Fehler auslösen, wenn ein Überlauf auftritt. Sie sind benannt wie checked_sub
, checked_div
usw. Darüber hinaus geben add_with_overflow
, sub_with_overflow
, mul_with_overflow
sowohl die nicht überprüften Ergebnisse als auch einen booleschen Wert zurück, der das Vorhandensein eines Überlaufs anzeigt.
Base.Checked.checked_abs
— FunctionBase.checked_abs(x)
Berechnet abs(x)
und überprüft auf Überlauf-Fehler, wo dies zutrifft. Zum Beispiel können standardmäßige vorzeichenbehaftete Ganzzahlen im Zweierkomplement (z. B. Int
) abs(typemin(Int))
nicht darstellen, was zu einem Überlauf führt.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_neg
— FunctionBase.checked_neg(x)
Berechnet -x
und überprüft auf Überlauf-Fehler, wo dies zutrifft. Zum Beispiel können standardmäßige vorzeichenbehaftete Ganzzahlen im Zweierkomplement (z. B. Int
) -typemin(Int)
nicht darstellen, was zu einem Überlauf führt.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_add
— FunctionBase.checked_add(x, y)
Berechnet x+y
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_sub
— FunctionBase.checked_sub(x, y)
Berechnet x-y
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_mul
— FunctionBase.checked_mul(x, y)
Berechnet x*y
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_div
— FunctionBase.checked_div(x, y)
Berechnet div(x,y)
und überprüft auf Überlauf-Fehler, wo dies zutrifft.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_rem
— FunctionBase.checked_rem(x, y)
Berechnet x%y
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_fld
— FunctionBase.checked_fld(x, y)
Berechnet fld(x,y)
und überprüft auf Überlauf-Fehler, wo dies zutrifft.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_mod
— FunctionBase.checked_mod(x, y)
Berechnet mod(x,y)
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_cld
— FunctionBase.checked_cld(x, y)
Berechnet cld(x,y)
und überprüft auf Überlauf-Fehler, wo dies zutrifft.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.checked_pow
— FunctionBase.checked_pow(x, y)
Berechnet ^(x,y)
und überprüft auf Überlauf-Fehler, wo zutreffend.
Der Überlaufschutz kann eine spürbare Leistungseinbuße zur Folge haben.
Base.Checked.add_with_overflow
— FunctionBase.add_with_overflow(x, y) -> (r, f)
Berechnet r = x+y
, wobei das Flag f
angibt, ob ein Überlauf aufgetreten ist.
Base.Checked.sub_with_overflow
— FunctionBase.sub_with_overflow(x, y) -> (r, f)
Berechnet r = x-y
, wobei das Flag f
angibt, ob ein Überlauf aufgetreten ist.
Base.Checked.mul_with_overflow
— FunctionBase.mul_with_overflow(x, y) -> (r, f)
Berechnet r = x*y
, wobei das Flag f
angibt, ob ein Überlauf aufgetreten ist.
Base.abs2
— Functionabs2(x)
Quadratischer Absolutwert von x
.
Dies kann schneller sein als abs(x)^2
, insbesondere für komplexe Zahlen, bei denen abs(x)
eine Quadratwurzel über hypot
erfordert.
Beispiele
julia> abs2(-3)
9
julia> abs2(3.0 + 4.0im)
25.0
julia> sum(abs2, [1+2im, 3+4im]) # LinearAlgebra.norm(x)^2
30
Base.copysign
— Functioncopysign(x, y) -> z
Gibt z
zurück, das die Größe von x
und das gleiche Vorzeichen wie y
hat.
Beispiele
julia> copysign(1, -2)
-1
julia> copysign(-1, 2)
1
Base.sign
— Functionsign(x)
Gibt null zurück, wenn x==0
und $x/|x|$ andernfalls (d.h. ±1 für reelles x
).
Siehe auch signbit
, zero
, copysign
, flipsign
.
Beispiele
julia> sign(-4.0)
-1.0
julia> sign(99)
1
julia> sign(-0.0)
-0.0
julia> sign(0 + im)
0.0 + 1.0im
Base.signbit
— Functionsignbit(x)
Gibt true
zurück, wenn der Wert des Vorzeichens von x
negativ ist, andernfalls false
.
Beispiele
julia> signbit(-4)
true
julia> signbit(5)
false
julia> signbit(5.5)
false
julia> signbit(-4.1)
true
Base.flipsign
— Functionflipsign(x, y)
Gibt x
mit umgekehrtem Vorzeichen zurück, wenn y
negativ ist. Zum Beispiel abs(x) = flipsign(x,x)
.
Beispiele
julia> flipsign(5, 3)
5
julia> flipsign(5, -3)
-5
Base.sqrt
— Methodsqrt(x)
Gibt $\sqrt{x}$ zurück.
Wirft DomainError
für negative Real
Argumente. Verwenden Sie stattdessen komplexe negative Argumente. Beachten Sie, dass sqrt
einen Zweigschnitt entlang der negativen reellen Achse hat.
Der Präfixoperator √
ist äquivalent zu sqrt
.
Siehe auch: hypot
.
Beispiele
julia> sqrt(big(81))
9.0
julia> sqrt(big(-81))
ERROR: DomainError mit -81.0:
NaN-Ergebnis für nicht-NaN-Eingabe.
Stacktrace:
[1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]
julia> sqrt(big(complex(-81)))
0.0 + 9.0im
julia> sqrt(-81 - 0.0im) # -0.0im liegt unter dem Zweigschnitt
0.0 - 9.0im
julia> .√(1:4)
4-element Vector{Float64}:
1.0
1.4142135623730951
1.7320508075688772
2.0
Base.isqrt
— Functionisqrt(n::Integer)
Ganzzahlige Quadratwurzel: die größte ganze Zahl m
, so dass m*m <= n
.
julia> isqrt(5)
2
Base.Math.cbrt
— Methodcbrt(x::Real)
Gibt die Kubikwurzel von x
zurück, d.h. $x^{1/3}$. Negative Werte werden akzeptiert (es wird die negative reelle Wurzel zurückgegeben, wenn $x < 0$).
Der Präfixoperator ∛
ist äquivalent zu cbrt
.
Beispiele
julia> cbrt(big(27))
3.0
julia> cbrt(big(-27))
-3.0
Base.real
— Functionreal(z)
Gibt den Realteil der komplexen Zahl z
zurück.
Siehe auch: imag
, reim
, complex
, isreal
, Real
.
Beispiele
julia> real(1 + 3im)
1
real(T::Type)
Gibt den Typ zurück, der den Realteil eines Wertes des Typs T
darstellt. z.B.: für T == Complex{R}
gibt R
zurück. Entspricht typeof(real(zero(T)))
.
Beispiele
julia> real(Complex{Int})
Int64
julia> real(Float64)
Float64
real(A::AbstractArray)
Gibt ein Array zurück, das den Realteil jedes Eintrags im Array A
enthält.
Entspricht real.(A)
, mit dem Unterschied, dass wenn eltype(A) <: Real
A
ohne Kopieren zurückgegeben wird und dass wenn A
null Dimensionen hat, ein 0-dimensionales Array zurückgegeben wird (anstatt eines Skalars).
Beispiele
julia> real([1, 2im, 3 + 4im])
3-element Vector{Int64}:
1
0
3
julia> real(fill(2 - im))
0-dimensional Array{Int64, 0}:
2
Base.imag
— Functionimag(z)
Gibt den Imaginärteil der komplexen Zahl z
zurück.
Siehe auch: conj
, reim
, adjoint
, angle
.
Beispiele
julia> imag(1 + 3im)
3
imag(A::AbstractArray)
Gibt ein Array zurück, das den Imaginärteil jedes Eintrags im Array A
enthält.
Entspricht imag.(A)
, es sei denn, A
hat null Dimensionen, in diesem Fall wird ein 0-dimensionales Array zurückgegeben (anstatt eines Skalars).
Beispiele
julia> imag([1, 2im, 3 + 4im])
3-element Vector{Int64}:
0
2
4
julia> imag(fill(2 - im))
0-dimensional Array{Int64, 0}:
-1
Base.reim
— Functionreim(z)
Gibt ein Tupel der reellen und imaginären Teile der komplexen Zahl z
zurück.
Beispiele
julia> reim(1 + 3im)
(1, 3)
reim(A::AbstractArray)
Gibt ein Tupel von zwei Arrays zurück, die jeweils den Real- und den Imaginärteil jedes Eintrags in A
enthalten.
Entspricht (real.(A), imag.(A))
, es sei denn, eltype(A) <: Real
, in diesem Fall wird A
ohne Kopieren zurückgegeben, um den Realteil darzustellen, und wenn A
null Dimensionen hat, wird ein 0-dimensionales Array zurückgegeben (anstatt eines Skalars).
Beispiele
julia> reim([1, 2im, 3 + 4im])
([1, 0, 3], [0, 2, 4])
julia> reim(fill(2 - im))
(fill(2), fill(-1))
Base.conj
— Functionconj(z)
Berechne das komplexe Konjugat einer komplexen Zahl z
.
Beispiele
julia> conj(1 + 3im)
1 - 3im
conj(A::AbstractArray)
Gibt ein Array zurück, das den komplexen Konjugierten jedes Eintrags im Array A
enthält.
Entspricht conj.(A)
, mit dem Unterschied, dass wenn eltype(A) <: Real
, A
ohne Kopie zurückgegeben wird, und dass wenn A
null Dimensionen hat, ein 0-dimensionales Array zurückgegeben wird (anstatt eines Skalars).
Beispiele
julia> conj([1, 2im, 3 + 4im])
3-element Vector{Complex{Int64}}:
1 + 0im
0 - 2im
3 - 4im
julia> conj(fill(2 - im))
0-dimensional Array{Complex{Int64}, 0}:
2 + 1im
Base.angle
— Functionangle(z)
Berechnet den Phasenwinkel in Bogenmaß einer komplexen Zahl z
.
Gibt eine Zahl -pi ≤ angle(z) ≤ pi
zurück und ist somit entlang der negativen reellen Achse diskontinuierlich.
Siehe auch: atan
, cis
, rad2deg
.
Beispiele
julia> rad2deg(angle(1 + im))
45.0
julia> rad2deg(angle(1 - im))
-45.0
julia> rad2deg(angle(-1 + 1e-20im))
180.0
julia> rad2deg(angle(-1 - 1e-20im))
-180.0
Base.cis
— Functioncis(x)
Effizientere Methode für exp(im*x)
unter Verwendung der Eulerschen Formel: $\cos(x) + i \sin(x) = \exp(i x)$.
Siehe auch cispi
, sincos
, exp
, angle
.
Beispiele
julia> cis(π) ≈ -1
true
Base.cispi
— Functioncispi(x)
Genaueres Verfahren für cis(pi*x)
(insbesondere für große x
).
Siehe auch cis
, sincospi
, exp
, angle
.
Beispiele
julia> cispi(10000)
1.0 + 0.0im
julia> cispi(0.25 + 1im)
0.030556854645954562 + 0.03055685464595456im
Diese Funktion erfordert Julia 1.6 oder höher.
Base.binomial
— Functionbinomial(n::Integer, k::Integer)
Der binomiale Koeffizient $\binom{n}{k}$ ist der Koeffizient des $k$-ten Terms in der polynomialen Expansion von $(1+x)^n$.
Wenn $n$ nicht negativ ist, dann ist es die Anzahl der Möglichkeiten, k
aus n
Elementen auszuwählen:
\[\binom{n}{k} = \frac{n!}{k! (n-k)!}\]
wobei $n!$ die factorial
Funktion ist.
Wenn $n$ negativ ist, dann wird es in Bezug auf die Identität definiert
\[\binom{n}{k} = (-1)^k \binom{k-n-1}{k}\]
Siehe auch factorial
.
Beispiele
julia> binomial(5, 3)
10
julia> factorial(5) ÷ (factorial(5-3) * factorial(3))
10
julia> binomial(-5, 3)
-35
Externe Links
- Binomialkoeffizient auf Wikipedia.
binomial(x::Number, k::Integer)
Der verallgemeinerte binomiale Koeffizient, definiert für k ≥ 0
durch das Polynom
\[\frac{1}{k!} \prod_{j=0}^{k-1} (x - j)\]
Wenn k < 0
, gibt es null zurück.
Im Fall von ganzzahligen x
entspricht dies dem gewöhnlichen ganzzahligen binomialen Koeffizienten
\[\binom{n}{k} = \frac{n!}{k! (n-k)!}\]
Weitere Verallgemeinerungen für nicht-ganzzahlige k
sind mathematisch möglich, beinhalten jedoch die Gammafunktion und/oder die Betafunktion, die nicht von der Julia-Standardbibliothek bereitgestellt werden, aber in externen Paketen wie SpecialFunctions.jl verfügbar sind.
Externe Links
- Binomialkoeffizient auf Wikipedia.
Base.factorial
— Functionfactorial(n::Integer)
Fakultät von n
. Wenn n
eine Integer
ist, wird die Fakultät als Ganzzahl (mindestens 64 Bit) berechnet. Beachten Sie, dass dies überlaufen kann, wenn n
nicht klein ist, aber Sie können factorial(big(n))
verwenden, um das Ergebnis genau in beliebiger Präzision zu berechnen.
Siehe auch binomial
.
Beispiele
julia> factorial(6)
720
julia> factorial(21)
ERROR: OverflowError: 21 ist zu groß, um in der Tabelle nachgeschlagen zu werden; ziehen Sie in Betracht, stattdessen `factorial(big(21))` zu verwenden
Stacktrace:
[...]
julia> factorial(big(21))
51090942171709440000
Externe Links
- Fakultät auf Wikipedia.
Base.gcd
— Functiongcd(x, y...)
Größter gemeinsamer (positiver) Teiler (oder null, wenn alle Argumente null sind). Die Argumente können ganze und rationale Zahlen sein.
Rationale Argumente erfordern Julia 1.4 oder höher.
Beispiele
julia> gcd(6, 9)
3
julia> gcd(6, -9)
3
julia> gcd(6, 0)
6
julia> gcd(0, 0)
0
julia> gcd(1//3, 2//3)
1//3
julia> gcd(1//3, -2//3)
1//3
julia> gcd(1//3, 2)
1//3
julia> gcd(0, 0, 10, 15)
5
Base.lcm
— Functionlcm(x, y...)
Kleinste gemeinsame (positive) Vielfache (oder null, wenn ein Argument null ist). Die Argumente können ganze und rationale Zahlen sein.
Rationale Argumente erfordern Julia 1.4 oder höher.
Beispiele
julia> lcm(2, 3)
6
julia> lcm(-2, 3)
6
julia> lcm(0, 3)
0
julia> lcm(0, 0)
0
julia> lcm(1//3, 2//3)
2//3
julia> lcm(1//3, -2//3)
2//3
julia> lcm(1//3, 2)
2//1
julia> lcm(1, 3, 5, 7)
105
Base.gcdx
— Functiongcdx(a, b)
Berechnet den größten gemeinsamen (positiven) Teiler von a
und b
sowie deren Bézout-Koeffizienten, d.h. die ganzzahligen Koeffizienten u
und v
, die die Gleichung $ua+vb = d = gcd(a, b)$ erfüllen. $gcdx(a, b)$ gibt $(d, u, v)$ zurück.
Die Argumente können ganze und rationale Zahlen sein.
Rationale Argumente erfordern Julia 1.4 oder höher.
Beispiele
julia> gcdx(12, 42)
(6, -3, 1)
julia> gcdx(240, 46)
(2, -9, 47)
Bézout-Koeffizienten sind nicht eindeutig definiert. gcdx
gibt die minimalen Bézout-Koeffizienten zurück, die durch den erweiterten euklidischen Algorithmus berechnet werden. (Ref: D. Knuth, TAoCP, 2/e, S. 325, Algorithmus X.) Für vorzeichenbehaftete ganze Zahlen sind diese Koeffizienten u
und v
minimal im Sinne, dass $|u| < |b/d|$ und $|v| < |a/d|$. Darüber hinaus werden die Vorzeichen von u
und v
so gewählt, dass d
positiv ist. Für vorzeichenlose ganze Zahlen könnten die Koeffizienten u
und v
nahe ihrem typemax
liegen, und die Identität gilt dann nur über die Modulo-Arithmetik der vorzeichenlosen ganzen Zahlen.
Base.ispow2
— Functionispow2(n::Number) -> Bool
Überprüfen, ob n
eine ganze Potenz von zwei ist.
Siehe auch count_ones
, prevpow
, nextpow
.
Beispiele
julia> ispow2(4)
true
julia> ispow2(5)
false
julia> ispow2(4.5)
false
julia> ispow2(0.25)
true
julia> ispow2(1//8)
true
Unterstützung für nicht-Integer
Argumente wurde in Julia 1.6 hinzugefügt.
Base.nextpow
— Functionnextpow(a, x)
Die kleinste a^n
, die nicht kleiner als x
ist, wobei n
eine nicht-negative ganze Zahl ist. a
muss größer als 1 sein, und x
muss größer als 0 sein.
Siehe auch prevpow
.
Beispiele
julia> nextpow(2, 7)
8
julia> nextpow(2, 9)
16
julia> nextpow(5, 20)
25
julia> nextpow(4, 16)
16
Base.prevpow
— Functionprevpow(a, x)
Die größte a^n
, die nicht größer als x
ist, wobei n
eine nicht-negative ganze Zahl ist. a
muss größer als 1 sein, und x
darf nicht kleiner als 1 sein.
Beispiele
julia> prevpow(2, 7)
4
julia> prevpow(2, 9)
8
julia> prevpow(5, 20)
5
julia> prevpow(4, 16)
16
Base.nextprod
— Functionnextprod(factors::Union{Tuple,AbstractVector}, n)
Nächste ganze Zahl größer oder gleich n
, die als $\prod k_i^{p_i}$ für ganze Zahlen $p_1$, $p_2$, usw. geschrieben werden kann, für Faktoren $k_i$ in factors
.
Beispiele
julia> nextprod((2, 3), 105)
108
julia> 2^2 * 3^3
108
Die Methode, die ein Tuple akzeptiert, erfordert Julia 1.6 oder höher.
Base.invmod
— Functioninvmod(n::Integer, m::Integer)
Nehmen Sie das Inverse von n
modulo m
: y
, so dass $n y = 1 \pmod m$, und $div(y,m) = 0$. Dies wird einen Fehler auslösen, wenn $m = 0$ oder wenn $gcd(n,m) \neq 1$.
Beispiele
julia> invmod(2, 5)
3
julia> invmod(2, 3)
2
julia> invmod(5, 6)
5
invmod(n::Integer, T) where {T <: Base.BitInteger}
invmod(n::T) where {T <: Base.BitInteger}
Berechne das modulare Inverse von n
im ganzzahligen Ring vom Typ T
, d.h. modulo 2^N
, wobei N = 8*sizeof(T)
(z.B. N = 32
für Int32
). Mit anderen Worten erfüllen diese Methoden die folgenden Identitäten:
n * invmod(n) == 1
(n * invmod(n, T)) % T == 1
(n % T) * invmod(n, T) == 1
Beachte, dass *
hier die modulare Multiplikation im ganzzahligen Ring T
ist.
Die Angabe des Modulus, der durch einen ganzzahligen Typ impliziert wird, als expliziter Wert ist oft unpraktisch, da der Modulus definitionsgemäß zu groß ist, um durch den Typ dargestellt zu werden.
Das modulare Inverse wird viel effizienter berechnet als der allgemeine Fall unter Verwendung des in https://arxiv.org/pdf/2204.04342.pdf beschriebenen Algorithmus.
Die Methoden invmod(n)
und invmod(n, T)
erfordern Julia 1.11 oder höher.
```
Base.powermod
— Functionpowermod(x::Integer, p::Integer, m)
Berechne $x^p \pmod m$.
Beispiele
julia> powermod(2, 6, 5)
4
julia> mod(2^6, 5)
4
julia> powermod(5, 2, 20)
5
julia> powermod(5, 2, 19)
6
julia> powermod(5, 3, 19)
11
Base.ndigits
— Functionndigits(n::Integer; base::Integer=10, pad::Integer=1)
Berechne die Anzahl der Ziffern in der Ganzzahl n
, die in der Basis base
geschrieben ist (base
darf nicht in [-1, 0, 1]
sein), optional mit Nullen auf eine bestimmte Größe aufgepolstert (das Ergebnis wird niemals kleiner als pad
sein).
Siehe auch digits
, count_ones
.
Beispiele
julia> ndigits(0)
1
julia> ndigits(12345)
5
julia> ndigits(1022, base=16)
3
julia> string(1022, base=16)
"3fe"
julia> ndigits(123, pad=5)
5
julia> ndigits(-123)
3
Base.add_sum
— FunctionBase.add_sum(x, y)
Der Reduktionsoperator, der in sum
verwendet wird. Der Hauptunterschied zu +
besteht darin, dass kleine Ganzzahlen zu Int
/UInt
befördert werden.
Base.widemul
— Functionwidemul(x, y)
Multipliziere x
und y
und gebe das Ergebnis als einen größeren Typ zurück.
Siehe auch promote
, Base.add_sum
.
Beispiele
julia> widemul(Float32(3.0), 4.0) isa BigFloat
true
julia> typemax(Int8) * typemax(Int8)
1
julia> widemul(typemax(Int8), typemax(Int8)) # == 127^2
16129
Base.Math.evalpoly
— Functionevalpoly(x, p)
Bewerten Sie das Polynom $\sum_k x^{k-1} p[k]$ für die Koeffizienten p[1]
, p[2]
, ...; das heißt, die Koeffizienten sind in aufsteigender Reihenfolge nach der Potenz von x
angegeben. Schleifen werden zur Compile-Zeit entrollt, wenn die Anzahl der Koeffizienten statisch bekannt ist, d.h. wenn p
ein Tuple
ist. Diese Funktion generiert effizienten Code unter Verwendung der Horner-Methode, wenn x
reell ist, oder unter Verwendung eines Goertzel-ähnlichen [DK62] Algorithmus, wenn x
komplex ist.
Diese Funktion erfordert Julia 1.4 oder später.
Beispiele
julia> evalpoly(2, (1, 2, 3))
17
Base.Math.@evalpoly
— Macro@evalpoly(z, c...)
Bewerten Sie das Polynom $\sum_k z^{k-1} c[k]$ für die Koeffizienten c[1]
, c[2]
, ...; das heißt, die Koeffizienten sind in aufsteigender Reihenfolge nach der Potenz von z
angegeben. Dieses Makro erweitert sich zu effizientem Inline-Code, der entweder die Horner-Methode oder, für komplexe z
, einen effizienteren Goertzel-ähnlichen Algorithmus verwendet.
Siehe auch evalpoly
.
Beispiele
julia> @evalpoly(3, 1, 0, 1)
10
julia> @evalpoly(2, 1, 0, 1)
5
julia> @evalpoly(2, 1, 1, 1)
7
Base.FastMath.@fastmath
— Macro@fastmath expr
Führen Sie eine transformierte Version des Ausdrucks aus, die Funktionen aufruft, die die strengen IEEE-Semantiken verletzen können. Dies ermöglicht die schnellstmögliche Ausführung, aber die Ergebnisse sind undefiniert – seien Sie vorsichtig, wenn Sie dies tun, da es die numerischen Ergebnisse ändern kann.
Dies setzt die LLVM Fast-Math-Flags und entspricht der Option -ffast-math
in clang. Siehe die Hinweise zu Leistungsannotationen für weitere Details.
Beispiele
julia> @fastmath 1+2
3
julia> @fastmath(sin(3))
0.1411200080598672
Customizable binary operators
Einige Unicode-Zeichen können verwendet werden, um neue binäre Operatoren zu definieren, die die Infix-Notation unterstützen. Zum Beispiel ⊗(x,y) = kron(x,y)
definiert die ⊗
(otimes) Funktion als das Kronecker-Produkt, und man kann sie als binären Operator mit Infix-Syntax aufrufen: C = A ⊗ B
sowie mit der üblichen Präfix-Syntax C = ⊗(A,B)
.
Andere Zeichen, die solche Erweiterungen unterstützen, sind \odot ⊙
und \oplus ⊕
Die vollständige Liste befindet sich im Parser-Code: https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm
Diejenigen, die wie *
(in Bezug auf die Priorität) geparst werden, umfassen * / ÷ % & ⋅ ∘ × |\\| ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇ ⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻ ⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗
und diejenigen, die wie +
geparst werden, umfassen + - |\|| ⊕ ⊖ ⊞ ⊟ |++| ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⟇ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣
Es gibt viele andere, die mit Pfeilen, Vergleichen und Potenzen verbunden sind.
- DK62Donald Knuth, Art of Computer Programming, Volume 2: Seminumerical Algorithms, Sec. 4.6.4.