Mathematics
Mathematical Operators
Base.:-
— Method-(x)
عامل السالب الأحادي.
أمثلة
julia> -1
-1
julia> -(2)
-2
julia> -[1 2; 3 4]
2×2 Matrix{Int64}:
-1 -2
-3 -4
julia> -(true) # يترقى إلى Int
-1
julia> -(0x003)
0xfffd
Base.:+
— Functiondt::Date + t::Time -> DateTime
إن إضافة Date
مع Time
ينتج DateTime
. يتم استخدام أجزاء الساعة والدقيقة والثانية والمللي ثانية من Time
مع السنة والشهر واليوم من Date
لإنشاء DateTime
الجديد. ستؤدي الميكروثانية أو النانوثانية غير الصفرية في نوع Time
إلى حدوث InexactError
.
+(x, y...)
عامل الجمع.
العبارة x+y+z+...
تستدعي هذه الدالة مع جميع المعطيات، أي +(x, y, z, ...)
، والتي تستدعي بشكل افتراضي بعد ذلك (x+y) + z + ...
بدءًا من اليسار.
لاحظ أن حدوث تجاوز ممكن لمعظم أنواع الأعداد الصحيحة، بما في ذلك Int
الافتراضي، عند إضافة أعداد كبيرة.
أمثلة
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-(س, ص)
عامل الطرح.
أمثلة
julia> 2 - 3
-1
julia> -(2, 4.5)
-2.5
Base.:*
— Method*(x, y...)
عامل الضرب.
العبارة x*y*z*...
تستدعي هذه الدالة مع جميع المعطيات، أي *(x, y, z, ...)
، والتي تستدعي افتراضيًا بعد ذلك (x*y) * z * ...
بدءًا من اليسار.
الترتيب مثل 2pi
يستدعي أيضًا *(2, pi)
. لاحظ أن هذه العملية لها أولوية أعلى من الرمز *
الحرفي. لاحظ أيضًا أن الترتيب "0x..." (الصفر الصحيح مضروبًا في متغير يبدأ بـ x
) محظور لأنه يتعارض مع الثوابت الصحيحة غير الموقعة: 0x01 isa UInt8
.
لاحظ أن حدوث تجاوز ممكن لمعظم أنواع الأعداد الصحيحة، بما في ذلك Int
الافتراضي، عند ضرب أعداد كبيرة.
أمثلة
julia> 2 * 7 * 8
112
julia> *(2, 7, 8)
112
julia> [2 0; 0 3] * [1, 10] # مصفوفة * متجه
2-element Vector{Int64}:
2
30
julia> 1/2pi, 1/2*pi # الترتيب له أولوية أعلى
(0.15915494309189535, 1.5707963267948966)
julia> x = [1, 2]; x'x # متجه مرفوع * متجه
5
Base.:/
— Function/(x, y)
عامل القسمة اليمنى: ضرب x
في معكوس y
من اليمين.
يعطي نتائج عائمة للنقاط للأعداد الصحيحة. انظر ÷
للقسمة الصحيحة، أو //
لنتائج Rational
.
أمثلة
julia> 1/2
0.5
julia> 4/2
2.0
julia> 4.5/2
2.25
A / B
تقسيم المصفوفات من اليمين: A / B
يعادل (B' \ A')'
حيث \
هو عامل القسمة من اليسار. بالنسبة للمصفوفات المربعة، النتيجة X
هي بحيث A == X*B
.
انظر أيضًا: rdiv!
.
أمثلة
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)
عامل القسمة اليسارية: ضرب y
في معكوس x
من اليسار. يعطي نتائج عائمة للنقاط للوسائط الصحيحة.
أمثلة
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)
عامل الأس.
إذا كانت x
و y
أعدادًا صحيحة، فقد يحدث تجاوز. لإدخال الأعداد بالتدوين العلمي، استخدم أدبيات Float64
مثل 1.2e3
بدلاً من 1.2 * 10^3
.
إذا كانت y
أدبًا صحيحًا (مثل 2
في x^2
أو -3
في x^-3
)، يتم تحويل كود جوليا x^y
بواسطة المترجم إلى Base.literal_pow(^, x, Val(y))
، لتمكين التخصص في وقت الترجمة على قيمة الأس. (كخيار افتراضي لدينا Base.literal_pow(^, x, Val(y)) = ^(x,y)
، حيث عادةً ما يكون ^ == Base.^
ما لم يتم تعريف ^
في مساحة الأسماء المستدعاة.) إذا كانت y
أدبًا صحيحًا سالبًا، فإن Base.literal_pow
تحول العملية إلى inv(x)^-y
بشكل افتراضي، حيث -y
موجب.
أمثلة
julia> 3^5
243
julia> 3^-1 # يستخدم Base.literal_pow
0.3333333333333333
julia> p = -1;
julia> 3^p
ERROR: DomainError with -1:
Cannot raise an integer x to a negative power -1.
[...]
julia> 3.0^p
0.3333333333333333
julia> 10^19 > 0 # تجاوز صحيح
false
julia> big(10)^19 == 1e19
true
Base.fma
— Functionfma(x, y, z)
يحسب x*y+z
دون تقريب النتيجة الوسيطة x*y
. في بعض الأنظمة، يكون هذا أكثر تكلفة بشكل ملحوظ من x*y+z
. يتم استخدام fma
لتحسين الدقة في بعض الخوارزميات. انظر muladd
.
Base.muladd
— Functionmuladd(x, y, z)
الضرب والإضافة المدمجة: تحسب x*y+z
، ولكن تسمح بدمج الإضافة والضرب مع بعضهما البعض أو مع العمليات المحيطة من أجل الأداء. على سبيل المثال، قد يتم تنفيذ ذلك كـ fma
إذا كانت الأجهزة تدعمه بكفاءة. يمكن أن تكون النتيجة مختلفة على آلات مختلفة ويمكن أن تكون أيضًا مختلفة على نفس الآلة بسبب انتشار الثوابت أو تحسينات أخرى. انظر fma
.
أمثلة
julia> muladd(3, 2, 1)
7
julia> 3 * 2 + 1
7
muladd(A, y, z)
جمع الضرب والإضافة، A*y .+ z
، لعملية ضرب المصفوفات أو ضرب المصفوفة بالمتجه. النتيجة دائمًا بنفس حجم A*y
، لكن z
قد تكون أصغر، أو عددًا حقيقيًا.
هذه الطرق تتطلب Julia 1.6 أو أحدث.
أمثلة
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)
إرجاع المعكوس الضربي لـ x
، بحيث x*inv(x)
أو inv(x)*x
ينتج one(x)
(الهوية الضربية) حتى أخطاء التقريب.
إذا كان x
عددًا، فإن هذا في الأساس هو نفسه one(x)/x
، ولكن لبعض الأنواع قد يكون inv(x)
أكثر كفاءة قليلاً.
أمثلة
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)
يتطلب على الأقل Julia 1.2.
Base.div
— Functiondiv(x, y)
÷(x, y)
ناتج القسمة من القسمة الإقليدية (الصحيحة). يعادل عمومًا عملية رياضية x/y بدون جزء كسري.
انظر أيضًا: cld
, fld
, rem
, divrem
.
أمثلة
julia> 9 ÷ 4
2
julia> -5 ÷ 3
-1
julia> 5.0 ÷ 2
2.0
julia> div.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) with eltype Int64:
-1 -1 -1 0 0 0 0 0 1 1 1
Base.div
— Methoddiv(x, y, r::RoundingMode=RoundToZero)
ناتج قسمة من القسمة الإقليدية (الصحيحة). يحسب x / y
، مقربًا إلى عدد صحيح وفقًا لوضع التقريب r
. بعبارة أخرى، الكمية
round(x / y, r)
دون أي تقريب وسيط.
تتطلب الطريقة ذات الثلاثة معطيات التي تأخذ RoundingMode
وجود Julia 1.4 أو أحدث.
انظر أيضًا fld
و cld
، اللذان هما حالات خاصة من هذه الدالة.
يتطلب RoundFromZero
على الأقل Julia 1.9.
أمثلة:
julia> div(4, 3, RoundToZero) # يتطابق مع div(4, 3)
1
julia> div(4, 3, RoundDown) # يتطابق مع fld(4, 3)
1
julia> div(4, 3, RoundUp) # يتطابق مع 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)
أكبر عدد صحيح أقل من أو يساوي x / y
. يعادل div(x, y, RoundDown)
.
أمثلة
julia> fld(7.3, 5.5)
1.0
julia> fld.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) with eltype Int64:
-2 -2 -1 -1 -1 0 0 0 1 1 1
لأن fld(x, y)
تنفذ تقريبًا صحيحًا قائمًا على القيمة الحقيقية للأعداد العشرية، يمكن أن تنشأ حالات غير بديهية. على سبيل المثال:
julia> fld(6.0, 0.1)
59.0
julia> 6.0 / 0.1
60.0
julia> 6.0 / big(0.1)
59.99999999999999666933092612453056361837965690217069245739573412231113406246995
ما يحدث هنا هو أن القيمة الحقيقية للعدد العشري المكتوب كـ 0.1
أكبر قليلاً من القيمة العددية 1/10 بينما يمثل 6.0
الرقم 6 بدقة. لذلك، فإن القيمة الحقيقية لـ 6.0 / 0.1
أقل قليلاً من 60. عند القيام بالقسمة، يتم تقريبها بدقة إلى 60.0
، لكن fld(6.0, 0.1)
تأخذ دائمًا الأرضية للقيمة الحقيقية، لذا فإن النتيجة هي 59.0
.
Base.cld
— Functioncld(x, y)
أصغر عدد صحيح أكبر من أو يساوي x / y
. يعادل div(x, y, RoundUp)
.
أمثلة
julia> cld(5.5, 2.2)
3.0
julia> cld.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) with eltype Int64:
-1 -1 -1 0 0 0 1 1 1 2 2
Base.mod
— Functionmod(x::Integer, r::AbstractUnitRange)
ابحث عن y
في النطاق r
بحيث $x ≡ y (mod n)$، حيث n = length(r)
، أي y = mod(x - first(r), n) + first(r)
.
انظر أيضًا mod1
.
أمثلة
julia> mod(0, Base.OneTo(3)) # mod1(0, 3)
3
julia> mod(3, 0:2) # mod(3, 3)
0
تتطلب هذه الطريقة على الأقل جوليا 1.3.
mod(x, y)
rem(x, y, RoundDown)
تقليص x
بالنسبة إلى y
، أو بشكل مكافئ، باقي x
بعد القسمة المفلترة بواسطة y
، أي x - y*fld(x,y)
إذا تم حسابه بدون تقريب وسيط.
ستكون النتيجة بنفس إشارة y
، وذات مقدار أقل من abs(y)
(مع بعض الاستثناءات، انظر الملاحظة أدناه).
!!! ملاحظة عند استخدامه مع القيم العائمة، قد لا تكون النتيجة الدقيقة قابلة للتمثيل بواسطة النوع، وبالتالي قد يحدث خطأ في التقريب. على وجه الخصوص، إذا كانت النتيجة الدقيقة قريبة جدًا من y
، فقد يتم تقريبها إلى y
.
انظر أيضًا: 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}) with 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
ابحث عن y::T
بحيث x
≡ y
(mod n)، حيث n هو عدد الأعداد الصحيحة القابلة للتمثيل في T
، و y
هو عدد صحيح في [typemin(T),typemax(T)]
. إذا كان بإمكان T
تمثيل أي عدد صحيح (على سبيل المثال، T == BigInt
)، فإن هذه العملية تتوافق مع تحويل إلى T
.
أمثلة
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)
باقي القسمة الإقليدية، يعيد قيمة بنفس إشارة x
، وأصغر في المقدار من y
. هذه القيمة دائمًا دقيقة.
انظر أيضًا: div
, mod
, mod1
, divrem
.
أمثلة
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}) with eltype Int64:
-2 -1 0 -2 -1 0 1 2 0 1 2
Base.rem
— Methodrem(x, y, r::RoundingMode=RoundToZero)
احسب باقي x
بعد القسمة الصحيحة على y
، مع تقريب الناتج وفقًا لوضع التقريب r
. بعبارة أخرى، الكمية
x - y * round(x / y, r)
دون أي تقريب وسيط.
- إذا كان
r == RoundNearest
، فإن النتيجة دقيقة، وفي الفترة $[-|y| / 2, |y| / 2]$. انظر أيضًاRoundNearest
. - إذا كان
r == RoundToZero
(افتراضي)، فإن النتيجة دقيقة، وفي الفترة $[0, |y|)$ إذا كانتx
موجبة، أو $(-|y|, 0]$ بخلاف ذلك. انظر أيضًاRoundToZero
. - إذا كان
r == RoundDown
، فإن النتيجة في الفترة $[0, y)$ إذا كانتy
موجبة، أو $(y, 0]$ بخلاف ذلك. قد لا تكون النتيجة دقيقة إذا كانتx
وy
لهما إشارات مختلفة، وabs(x) < abs(y)
. انظر أيضًاRoundDown
. - إذا كان
r == RoundUp
، فإن النتيجة في الفترة $(-y, 0]$ إذا كانتy
موجبة، أو $[0, -y)$ بخلاف ذلك. قد لا تكون النتيجة دقيقة إذا كانتx
وy
لهما نفس الإشارة، وabs(x) < abs(y)
. انظر أيضًاRoundUp
. - إذا كان
r == RoundFromZero
، فإن النتيجة في الفترة $(-y, 0]$ إذا كانتy
موجبة، أو $[0, -y)$ بخلاف ذلك. قد لا تكون النتيجة دقيقة إذا كانتx
وy
لهما نفس الإشارة، وabs(x) < abs(y)
. انظر أيضًاRoundFromZero
.
RoundFromZero
يتطلب على الأقل Julia 1.9.
أمثلة:
julia> x = 9; y = 4;
julia> x % y # نفس الشيء مثل rem(x, y)
1
julia> x ÷ y # نفس الشيء مثل div(x, y)
2
julia> x == div(x, y) * y + rem(x, y)
true
Base.Math.rem2pi
— Functionrem2pi(x, r::RoundingMode)
احسب باقي x
بعد القسمة الصحيحة على 2π
، مع تقريب الناتج وفقًا لوضع التقريب r
. بعبارة أخرى، الكمية
x - 2π*round(x/(2π),r)
دون أي تقريب وسيط. يستخدم هذا داخليًا تقريبًا عالي الدقة لـ 2π، وبالتالي سيعطي نتيجة أكثر دقة من rem(x,2π,r)
- إذا كان
r == RoundNearest
، فإن النتيجة تكون في الفترة $[-π, π]$. ستكون هذه عمومًا النتيجة الأكثر دقة. انظر أيضًاRoundNearest
. - إذا كان
r == RoundToZero
، فإن النتيجة تكون في الفترة $[0, 2π]$ إذا كانتx
موجبة، أو $[-2π, 0]$ بخلاف ذلك. انظر أيضًاRoundToZero
. - إذا كان
r == RoundDown
، فإن النتيجة تكون في الفترة $[0, 2π]$. انظر أيضًاRoundDown
. - إذا كان
r == RoundUp
، فإن النتيجة تكون في الفترة $[-2π, 0]$. انظر أيضًاRoundUp
.
أمثلة
julia> rem2pi(7pi/4, RoundNearest)
-0.7853981633974485
julia> rem2pi(7pi/4, RoundDown)
5.497787143782138
Base.Math.mod2pi
— Functionmod2pi(x)
المودول بعد القسمة على 2π
، مع إرجاع القيمة في النطاق $[0,2π)$.
تقوم هذه الدالة بحساب تمثيل النقطة العائمة للمودول بعد القسمة على 2π
بدقة عددية، وبالتالي فهي ليست بالضبط نفس mod(x,2π)
، الذي سيحسب المودول لـ x
بالنسبة للقسمة على الرقم العائم 2π
.
!!! ملاحظة اعتمادًا على تنسيق قيمة الإدخال، قد تكون أقرب قيمة قابلة للتمثيل لـ 2π
أقل من 2π
. على سبيل المثال، التعبير mod2pi(2π)
لن يُرجع 0
، لأن القيمة الوسيطة لـ 2*π
هي Float64
و 2*Float64(π) < 2*big(π)
. انظر rem2pi
لمزيد من التحكم الدقيق في هذا السلوك.
أمثلة
julia> mod2pi(9*pi/4)
0.7853981633974481
Base.divrem
— Functiondivrem(x, y, r::RoundingMode=RoundToZero)
حاصل القسمة والباقي من القسمة الإقليدية. يعادل (div(x, y, r), rem(x, y, r))
. وبالمثل، مع القيمة الافتراضية لـ r
، فإن هذه المكالمة تعادل (x ÷ y, x % y)
.
أمثلة
julia> divrem(3, 7)
(0, 3)
julia> divrem(7, 3)
(2, 1)
Base.fldmod
— Functionfldmod(x, y)
ناتج القسمة المفلتر والمودول بعد القسمة. غلاف مريح لـ divrem(x, y, RoundDown)
. يعادل (fld(x, y), mod(x, y))
.
Base.fld1
— Functionfld1(x, y)
قسمة الأرض، تعيد قيمة متوافقة مع mod1(x,y)
أمثلة
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)
الناتج بعد قسمة الطابق، مع إرجاع قيمة r
بحيث mod(r, y) == mod(x, y)
في النطاق $(0, y]$ لـ y
الموجبة وفي النطاق $[y,0)$ لـ y
السالبة.
مع المعاملات الصحيحة و y
الموجبة، هذا يساوي mod(x, 1:y)
، وبالتالي فهو طبيعي للفهرسة التي تبدأ من 1. بالمقارنة، mod(x, y) == mod(x, 0:y-1)
هو طبيعي للحسابات مع الإزاحات أو الخطوات.
انظر أيضًا mod
، fld1
، fldmod1
.
أمثلة
julia> mod1(4, 2)
2
julia> mod1.(-5:5, 3)'
1×11 adjoint(::Vector{Int64}) with 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)
قسّم عددين صحيحين أو أعداد كسرية، مع إعطاء نتيجة Rational
. بشكل عام، يمكن استخدام //
للقسمة الكسرية الدقيقة لأنواع عددية أخرى تحتوي على مكونات صحيحة أو كسرية، مثل الأعداد المركبة ذات المكونات الصحيحة.
لاحظ أن الوسائط من نوع النقطة العائمة (AbstractFloat
) غير مسموح بها بواسطة //
(حتى لو كانت القيم كسرية). يجب أن تكون الوسائط من الأنواع الفرعية لـ Integer
، Rational
، أو مركبات منها.
أمثلة
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))
قم بتقريب الرقم العائم x
كعدد Rational
مع مكونات من نوع العدد الصحيح المعطى. ستختلف النتيجة عن x
بأكثر من tol
.
أمثلة
julia> rationalize(5.6)
28//5
julia> a = rationalize(BigInt, 10.3)
103//10
julia> typeof(numerator(a))
BigInt
Base.numerator
— Functionالمقام(x)
المقام من التمثيل الكسرى لـ x
.
أمثلة
julia> numerator(2//3)
2
julia> numerator(4)
4
Base.denominator
— Functionمقام(x)
مقام التمثيل الكسري لـ x
.
أمثلة
julia> مقام(2//3)
3
julia> مقام(4)
1
Base.:<<
— Function<<(x, n)
عامل إزاحة البت لليسار، x << n
. بالنسبة لـ n >= 0
، تكون النتيجة هي x
مزاحة لليسار بمقدار n
بت، مع ملء بـ 0
s. هذا يعادل x * 2^n
. بالنسبة لـ n < 0
، هذا يعادل x >> -n
.
أمثلة
julia> Int8(3) << 2
12
julia> bitstring(Int8(3))
"00000011"
julia> bitstring(Int8(12))
"00001100"
<<(B::BitVector, n) -> BitVector
عامل إزاحة البت لليسار، B << n
. بالنسبة لـ n >= 0
، تكون النتيجة هي B
مع العناصر المزالة n
موضعًا للخلف، مع ملء القيم بـ false
. إذا كان n < 0
، يتم إزاحة العناصر للأمام. يعادل B >> -n
.
أمثلة
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)
عامل إزاحة البت إلى اليمين، x >> n
. بالنسبة لـ n >= 0
، تكون النتيجة هي x
مزاحة إلى اليمين بمقدار n
بت، مع ملء بـ 0
s إذا كان x >= 0
، و 1
s إذا كان x < 0
، مع الحفاظ على إشارة x
. هذا يعادل fld(x, 2^n)
. بالنسبة لـ n < 0
، هذا يعادل x << -n
.
أمثلة
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
عامل الإزاحة إلى اليمين، B >> n
. بالنسبة لـ n >= 0
، تكون النتيجة B
مع العناصر المزيحة n
موضعًا للأمام، مع ملء القيم بـ false
. إذا كان n < 0
، يتم إزاحة العناصر للخلف. يعادل B << -n
.
أمثلة
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)
عامل إزاحة البت غير الموقعة إلى اليمين، x >>> n
. بالنسبة لـ n >= 0
، تكون النتيجة هي x
مزاحة إلى اليمين بمقدار n
بت، مع ملء بـ 0
s. بالنسبة لـ n < 0
، فإن هذا يعادل x << -n
.
بالنسبة لأنواع الأعداد الصحيحة Unsigned
، فإن هذا يعادل >>
. بالنسبة لأنواع الأعداد الصحيحة Signed
، فإن هذا يعادل signed(unsigned(x) >> n)
.
أمثلة
julia> Int8(-14) >>> 2
60
julia> bitstring(Int8(-14))
"11110010"
julia> bitstring(Int8(60))
"00111100"
تُعتبر BigInt
s كما لو كانت بحجم غير محدود، لذا لا يلزم الملء وهذا يعادل >>
.
>>>(B::BitVector, n) -> BitVector
عامل إزاحة البت غير الموقعة إلى اليمين، B >>> n
. يعادل B >> n
. انظر >>
لمزيد من التفاصيل والأمثلة.
Base.bitrotate
— Functionbitrotate(x::Base.BitInteger, k::Integer)
bitrotate(x, k)
ينفذ التدوير البتّي. يُرجع قيمة x
مع تدوير بتاته إلى اليسار k
مرات. القيمة السلبية لـ k
ستقوم بالتدوير إلى اليمين بدلاً من ذلك.
هذه الدالة تتطلب Julia 1.5 أو أحدث.
انظر أيضًا: <<
, 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
اقتبس تعبير expr
، معيدًا شجرة التركيب المجردة (AST) لـ expr
. قد تكون شجرة التركيب من النوع Expr
أو Symbol
أو قيمة حرفية. التعبير :identifier
يقيم إلى Symbol
.
انظر أيضًا: Expr
، Symbol
، Meta.parse
أمثلة
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)
قم بإنشاء مصفوفة متخصصة تحتوي على عناصر متباعدة بالتساوي وتخزين محسن (وهو AbstractRange
) من المعطيات. رياضيًا، يتم تحديد النطاق بشكل فريد بواسطة أي ثلاثة من start
و step
و stop
و length
. الاستدعاءات الصحيحة لـ range هي:
- استدعاء
range
مع أي ثلاثة منstart
وstep
وstop
وlength
. - استدعاء
range
مع اثنين منstart
وstop
وlength
. في هذه الحالة، سيتم افتراض أنstep
يساوي واحد. إذا كانت كلا المعطيات من الأعداد الصحيحة، سيتم إرجاعUnitRange
. - استدعاء
range
مع واحد منstop
أوlength
. سيتم افتراض أنstart
وstep
يساويان واحد.
انظر المساعدة الموسعة لمزيد من التفاصيل حول النوع المعاد. انظر أيضًا logrange
للنقاط المتباعدة لوغاريتميًا.
أمثلة
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
إذا لم يتم تحديد length
و stop - start
ليس مضاعفًا صحيحًا لـ step
، سيتم إنتاج نطاق ينتهي قبل stop
.
julia> range(1, 3.5, step=2)
1.0:2.0:3.0
تم اتخاذ احتياطات خاصة لضمان حساب القيم الوسيطة بشكل عقلاني. لتجنب هذا الحمل الزائد الناتج، انظر إلى منشئ LinRange
.
يتطلب stop
كمعطى موضعي على الأقل Julia 1.1.
تتطلب الإصدارات بدون معطيات مفتاحية و start
كمعطى مفتاح على الأقل Julia 1.7.
تتطلب الإصدارات التي تحتوي على stop
كمعطى مفتاح وحيد، أو length
كمعطى مفتاح وحيد على الأقل Julia 1.8.
المساعدة الموسعة
سيقوم range
بإنتاج Base.OneTo
عندما تكون المعطيات أعداد صحيحة و
- تم توفير
length
فقط - تم توفير
stop
فقط
سيقوم range
بإنتاج UnitRange
عندما تكون المعطيات أعداد صحيحة و
- تم توفير
start
وstop
فقط - تم توفير
length
وstop
فقط
لا يتم إنتاج UnitRange
إذا تم توفير step
حتى لو تم تحديده كواحد.
Base.OneTo
— TypeBase.OneTo(n)
قم بتعريف AbstractUnitRange
يتصرف مثل 1:n
، مع التمييز الإضافي بأن الحد الأدنى مضمون (من خلال نظام النوع) أن يكون 1.
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}
نطاق r
حيث r[i]
ينتج قيمًا من النوع T
(في الشكل الأول، يتم استنتاج T
تلقائيًا)، مُعَلم بمعامل ref
، وstep
، وlen
gth. بشكل افتراضي، ref
هو القيمة الابتدائية r[1]
، ولكن بدلاً من ذلك يمكنك تقديمه كقيمة لـ r[offset]
لمؤشر آخر 1 <= offset <= len
. بناء الجملة a:b
أو a:b:c
، حيث أي من a
، b
، أو c
هي أرقام عائمة، ينشئ StepRangeLen
.
يتطلب المعامل النوعي الرابع L
على الأقل Julia 1.7.
Base.logrange
— Functionlogrange(start, stop, length)
logrange(start, stop; length)
قم بإنشاء مصفوفة متخصصة تكون عناصرها متباعدة لوغاريتمياً بين النقاط النهائية المعطاة. أي أن نسبة العناصر المتعاقبة ثابتة، يتم حسابها من الطول.
هذا مشابه لـ geomspace
في بايثون. على عكس PowerRange
في Mathematica، تحدد عدد العناصر وليس النسبة. على عكس logspace
في بايثون و Matlab، فإن وسائط start
و stop
هي دائماً العناصر الأولى والأخيرة من النتيجة، وليس قوى مطبقة على بعض الأساس.
أمثلة
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) # العنصر الأوسط هو المتوسط الهندسي
true
julia> range(10, 40, length=3)[2] ≈ (10 + 40)/2 # المتوسط الحسابي
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
انظر إلى LogRange
للحصول على مزيد من التفاصيل.
انظر أيضًا range
لنقاط متباعدة خطياً.
تتطلب هذه الوظيفة على الأقل Julia 1.11.
Base.LogRange
— TypeLogRange{T}(start, stop, len) <: AbstractVector{T}
نطاق تكون عناصره متباعدة لوغاريتمياً بين start
و stop
، مع التحكم في التباعد بواسطة len
. يتم إرجاعه بواسطة logrange
.
مثل LinRange
، ستكون العناصر الأولى والأخيرة بالضبط تلك المقدمة، ولكن القيم الوسيطة قد تحتوي على أخطاء صغيرة في النقطة العائمة. يتم حساب هذه باستخدام لوغاريتمات النقاط النهائية، والتي يتم تخزينها عند الإنشاء، غالبًا بدقة أعلى من T
.
أمثلة
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
لاحظ أن نوع العنصر الصحيح T
غير مسموح به. استخدم على سبيل المثال round.(Int, xs)
، أو قوى صريحة لبعض الأسس الصحيحة:
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]
هذا النوع يتطلب على الأقل Julia 1.11.
Base.:==
— Function==(x, y)
عامل المساواة العام. يعتمد على ===
. يجب أن يتم تنفيذه لجميع الأنواع التي لديها مفهوم المساواة، بناءً على القيمة المجردة التي يمثلها الكائن. على سبيل المثال، تتم مقارنة جميع الأنواع الرقمية بالقيمة الرقمية، متجاهلة النوع. تتم مقارنة السلاسل كترتيب من الأحرف، متجاهلة الترميز. عادةً ما تقارن المجموعات من نفس النوع مجموعات المفاتيح الخاصة بها، وإذا كانت تلك ==
، فإنها تقارن القيم لكل من تلك المفاتيح، وتعيد true إذا كانت جميع تلك الأزواج ==
. عادةً ما لا تؤخذ الخصائص الأخرى في الاعتبار (مثل النوع الدقيق).
يتبع هذا العامل دلالات IEEE للأرقام العائمة: 0.0 == -0.0
و NaN != NaN
.
النتيجة من نوع Bool
، باستثناء عندما يكون أحد المعاملات هو missing
، وفي هذه الحالة يتم إرجاع missing
(المنطق ثلاثي القيم). عادةً ما تنفذ المجموعات منطقًا ثلاثي القيم مشابهًا لـ all
، حيث تعيد missing
إذا كانت أي من المعاملات تحتوي على قيم مفقودة وكانت جميع الأزواج الأخرى متساوية. استخدم isequal
أو ===
للحصول دائمًا على نتيجة Bool
.
التنفيذ
يجب على الأنواع الرقمية الجديدة تنفيذ هذه الوظيفة لوسيطين من النوع الجديد، والتعامل مع المقارنة مع الأنواع الأخرى عبر قواعد الترويج حيثما كان ذلك ممكنًا.
isequal
يعتمد على ==
، لذا ستستخدم الطرق الجديدة لـ ==
من قبل نوع Dict
لمقارنة المفاتيح. إذا كان سيتم استخدام نوعك كمفتاح في القاموس، فيجب عليه أيضًا تنفيذ hash
.
إذا كان بعض الأنواع يعرف ==
و isequal
و isless
فيجب عليه أيضًا تنفيذ <
لضمان اتساق المقارنات.
Base.:!=
— Function!=(x, y)
≠(x,y)
عامل المقارنة غير المتساوي. يعطي دائمًا الإجابة المعاكسة لـ ==
.
التنفيذ
يجب عمومًا ألا تقوم الأنواع الجديدة بتنفيذ هذا، والاعتماد على التعريف الافتراضي !=(x,y) = !(x==y)
بدلاً من ذلك.
أمثلة
julia> 3 != 2
true
julia> "foo" ≠ "foo"
false
!=(x)
أنشئ دالة تقارن وسيطها بـ x
باستخدام !=
، أي دالة تعادل y -> y != x
. الدالة المعادة هي من النوع Base.Fix2{typeof(!=)}
، والتي يمكن استخدامها لتنفيذ طرق متخصصة.
تتطلب هذه الوظيفة على الأقل Julia 1.2.
Base.:!==
— Function!==(x, y)
≢(x,y)
يعطي دائمًا الإجابة المعاكسة لـ ===
.
أمثلة
julia> a = [1, 2]; b = [1, 2];
julia> a ≢ b
true
julia> a ≢ a
false
Base.:<
— Function<(x, y)
عامل المقارنة أقل من. يعتمد على isless
. بسبب سلوك قيم NaN العائمة، يقوم هذا العامل بتنفيذ ترتيب جزئي.
التنفيذ
يجب على الأنواع الجديدة التي تحتوي على ترتيب جزئي قياسي تنفيذ هذه الدالة لوسيطين من النوع الجديد. يجب على الأنواع التي تحتوي على ترتيب كلي قياسي تنفيذ isless
بدلاً من ذلك.
انظر أيضًا isunordered
.
أمثلة
julia> 'a' < 'b'
true
julia> "abc" < "abd"
true
julia> 5 < 3
false
<(x)
أنشئ دالة تقارن وسيطها بـ x
باستخدام <
، أي دالة تعادل y -> y < x
. الدالة المعادة هي من النوع Base.Fix2{typeof(<)}
، والتي يمكن استخدامها لتنفيذ طرق متخصصة.
تتطلب هذه الوظيفة على الأقل Julia 1.2.
Base.:<=
— Function<=(x, y)
≤(x,y)
عامل مقارنة أقل من أو يساوي. يعتمد على (x < y) | (x == y)
.
أمثلة
julia> 'a' <= 'b'
true
julia> 7 ≤ 7 ≤ 9
true
julia> "abc" ≤ "abc"
true
julia> 5 <= 3
false
<=(x)
أنشئ دالة تقارن وسيطها بـ x
باستخدام <=
، أي دالة تعادل y -> y <= x
. الدالة المعادة هي من النوع Base.Fix2{typeof(<=)}
، والتي يمكن استخدامها لتنفيذ طرق متخصصة.
تتطلب هذه الوظيفة على الأقل Julia 1.2.
Base.:>
— Function>(x, y)
عامل المقارنة أكبر من. يعتمد على y < x
.
التنفيذ
بشكل عام، يجب على الأنواع الجديدة تنفيذ <
بدلاً من هذه الدالة، والاعتماد على التعريف الاحتياطي >(x, y) = y < x
.
أمثلة
julia> 'a' > 'b'
false
julia> 7 > 3 > 1
true
julia> "abc" > "abd"
false
julia> 5 > 3
true
>(x)
أنشئ دالة تقارن وسيطها بـ x
باستخدام >
، أي دالة تعادل y -> y > x
. الدالة المعادة هي من النوع Base.Fix2{typeof(>)}
، والتي يمكن استخدامها لتنفيذ طرق متخصصة.
تتطلب هذه الوظيفة على الأقل Julia 1.2.
Base.:>=
— Function>=(x, y)
≥(x,y)
عامل مقارنة أكبر من أو يساوي. يعود إلى y <= x
.
أمثلة
julia> 'a' >= 'b'
false
julia> 7 ≥ 7 ≥ 3
true
julia> "abc" ≥ "abc"
true
julia> 5 >= 3
true
>=(x)
أنشئ دالة تقارن وسيطها بـ x
باستخدام >=
، أي دالة تعادل y -> y >= x
. الدالة المعادة هي من النوع Base.Fix2{typeof(>=)}
، والتي يمكن استخدامها لتنفيذ طرق متخصصة.
تتطلب هذه الوظيفة على الأقل Julia 1.2.
Base.cmp
— Functioncmp(x,y)
يرجع -1 أو 0 أو 1 اعتمادًا على ما إذا كان x
أقل من أو يساوي أو أكبر من y
، على التوالي. يستخدم الترتيب الكلي المنفذ بواسطة isless
.
أمثلة
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)
إرجاع -1 أو 0 أو 1 اعتمادًا على ما إذا كان x
أقل من أو يساوي أو أكبر من y
، على التوالي. تحدد الحجة الأولى دالة مقارنة أقل من لاستخدامها.
cmp(a::AbstractString, b::AbstractString) -> Int
قارن بين سلسلتين. أعد 0
إذا كانت السلسلتان لهما نفس الطول وكان الحرف في كل فهرس هو نفسه في كلا السلسلتين. أعد -1
إذا كانت a
بادئة لـ b
، أو إذا كانت a
تأتي قبل b
في الترتيب الأبجدي. أعد 1
إذا كانت b
بادئة لـ a
، أو إذا كانت b
تأتي قبل a
في الترتيب الأبجدي (تقنيًا، الترتيب المعجمي حسب نقاط الشيفرة Unicode).
أمثلة
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
العملية المنطقية البتية "و". تنفذ المنطق الثلاثي القيم، وتعيد missing
إذا كان أحد المعاملين هو missing
والآخر هو true
. أضف أقواسًا لشكل تطبيق الدالة: (&)(x, y)
.
أمثلة
julia> 4 & 10
0
julia> 4 & 12
4
julia> true & missing
missing
julia> false & missing
false
Base.:|
— Functionx | y
أو بت bitwise. ينفذ المنطق الثلاثي القيم، ويعيد missing
إذا كان أحد المعاملين هو missing
والآخر هو false
.
أمثلة
julia> 4 | 10
14
julia> 4 | 1
5
julia> true | missing
true
julia> false | missing
missing
Base.xor
— Functionxor(x, y)
⊻(x, y)
العملية الحصرية البتية لـ x
و y
. تنفذ المنطق الثلاثي القيم، وتعيد missing
إذا كان أحد المعطيات هو missing
.
العملية البينية a ⊻ b
هي مرادف لـ xor(a,b)
، ويمكن كتابة ⊻
عن طريق إكمال التبويب \xor
أو \veebar
في REPL جوليا.
أمثلة
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)
عملية nand بتقنية البت (ليس و) لـ x
و y
. تنفذ المنطق الثلاثي القيم، وتعيد missing
إذا كان أحد المعطيات هو missing
.
العملية الجانبية a ⊼ b
هي مرادف لـ nand(a,b)
، ويمكن كتابة ⊼
عن طريق إكمال التبويب \nand
أو \barwedge
في REPL جولي.
أمثلة
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)
العملية النقطية النفي (not or) لـ x
و y
. تنفذ المنطق الثلاثي القيم، وتعيد missing
إذا كان أحد المعطيات هو missing
والآخر ليس true
.
العملية البينية a ⊽ b
هي مرادف لـ nor(a,b)
، ويمكن كتابة ⊽
عن طريق إكمال التبويب \nor
أو \barvee
في REPL جوليا.
أمثلة
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)
النفي البولياني. ينفذ المنطق ثلاثي القيم، ويعيد missing
إذا كانت x
هي missing
.
انظر أيضًا ~
للنفي بتقنية البت.
أمثلة
julia> !true
false
julia> !false
true
julia> !missing
missing
julia> .![true false true]
1×3 BitMatrix:
0 1 0
!f::Function
نفي دالة الشرط: عندما يكون وسيط !
دالة، فإنه يُرجع دالة مركبة تحسب نفي f
البولياني.
انظر أيضًا ∘
.
أمثلة
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: |-| < ⇒ |()-()| < "
بدءًا من جوليا 1.9، يُرجع !f
ComposedFunction
بدلاً من دالة مجهولة.
&&
— Keywordx && y
اختصار عملية AND المنطقية.
انظر أيضًا &
، وعامل الشرط ? :
، وقسم الدليل حول تدفق التحكم.
أمثلة
julia> x = 3;
julia> x > 1 && x < 10 && x isa Int
true
julia> x < 0 && error("expected positive x")
false
||
— Keywordx || y
اختصار المنطق البولياني OR.
أمثلة
julia> pi < 3 || ℯ < 3
true
julia> false || true || println("neither is true!")
true
Mathematical Functions
Base.isapprox
— Functionisapprox(x, y; atol::Real=0, rtol::Real=atol>0 ? 0 : √eps, nans::Bool=false[, norm::Function])
مقارنة المساواة غير الدقيقة. يتم اعتبار رقمين متساويين إذا كانت المسافة النسبية أو المسافة المطلقة بينهما ضمن حدود التسامح: isapprox
ترجع true
إذا كان norm(x-y) <= max(atol, rtol*max(norm(x), norm(y)))
. القيمة الافتراضية لـ atol
(التسامح المطلق) هي صفر والقيمة الافتراضية لـ rtol
(التسامح النسبي) تعتمد على أنواع x
و y
. تحدد الوسيطة الرئيسية nans
ما إذا كانت قيم NaN تعتبر متساوية أم لا (القيمة الافتراضية هي false).
بالنسبة للقيم العائمة الحقيقية أو المعقدة، إذا لم يتم تحديد atol > 0
، فإن rtol
تكون افتراضيًا جذر eps
من نوع x
أو y
، أيهما أكبر (الأقل دقة). وهذا يتوافق مع متطلبات المساواة لنحو نصف الأرقام المهمة. خلاف ذلك، على سبيل المثال، بالنسبة للوسائط الصحيحة أو إذا تم تقديم atol > 0
، فإن rtol
تكون افتراضيًا صفر.
تكون الوسيطة الرئيسية norm
افتراضيًا abs
للأرقام (x,y)
و LinearAlgebra.norm
للمصفوفات (حيث يكون اختيار norm
البديل مفيدًا أحيانًا). عندما تكون x
و y
مصفوفات، إذا لم تكن norm(x-y)
نهائية (أي ±Inf
أو NaN
)، فإن المقارنة تعود إلى التحقق مما إذا كانت جميع عناصر x
و y
متساوية تقريبًا من حيث المكونات.
المشغل الثنائي ≈
يعادل isapprox
مع الوسائط الافتراضية، و x ≉ y
يعادل !isapprox(x,y)
.
لاحظ أن x ≈ 0
(أي، المقارنة بالصفر مع التسامحات الافتراضية) تعادل x == 0
حيث أن القيمة الافتراضية لـ atol
هي 0
. في مثل هذه الحالات، يجب عليك إما تقديم atol
مناسب (أو استخدام norm(x) ≤ atol
) أو إعادة ترتيب الكود الخاص بك (على سبيل المثال، استخدام x ≈ y
بدلاً من x - y ≈ 0
). لا يمكن اختيار atol
غير الصفري تلقائيًا لأنه يعتمد على المقياس العام (الـ "وحدات") لمشكلتك: على سبيل المثال، في x - y ≈ 0
، فإن atol=1e-9
هو تسامح صغير بشكل غير معقول إذا كان x
هو نصف قطر الأرض بالمتر، ولكنه تسامح كبير بشكل غير معقول إذا كان x
هو نصف قطر ذرة الهيدروجين بالمتر.
يتطلب تمرير الوسيطة الرئيسية norm
عند مقارنة الوسائط الرقمية (غير المصفوفات) وجود Julia 1.6 أو أحدث.
أمثلة
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...)
أنشئ دالة تقارن وسيطها بـ x
باستخدام ≈
، أي دالة تعادل y -> y ≈ x
.
تكون وسائط الكلمات الرئيسية المدعومة هنا هي نفسها الموجودة في isapprox
ذات الوسيطين.
تتطلب هذه الطريقة Julia 1.5 أو أحدث.
Base.sin
— Methodsin(x)
احسب جيب الزاوية لـ x
، حيث x
بال radians.
انظر أيضًا sind
، sinpi
، sincos
، cis
، asin
.
أمثلة
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)
احسب جيب الزاوية وجيب التمام لـ x
في نفس الوقت، حيث x
بالراديان، مع إرجاع زوج مرتب (sine, cosine)
.
Base.tan
— Methodtan(x)
احسب ظل x
، حيث x
بال radians.
Base.Math.sind
— Functionsind(x)
احسب جيب الزاوية لـ x
، حيث أن x
بالدرجات. إذا كانت x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.cosd
— Functioncosd(x)
احسب جيب التمام لـ x
، حيث x
بالدرجات. إذا كانت x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة Julia 1.7 أو أحدث.
Base.Math.tand
— Functiontand(x)
احسب ظل x
، حيث x
بالدرجات. إذا كانت x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.sincosd
— Functionsincosd(x)
احسب جيب الزاوية وجيب التمام لـ x
في نفس الوقت، حيث x
بالدرجات.
تتطلب هذه الدالة على الأقل جوليا 1.3.
Base.Math.sinpi
— Functionsinpi(x)
احسب $\sin(\pi x)$ بدقة أكبر من sin(pi*x)
، خاصة للقيم الكبيرة لـ x
.
Base.Math.cospi
— Functioncospi(x)
احسب $\cos(\pi x)$ بدقة أكبر من cos(pi*x)
، خاصة للقيم الكبيرة لـ x
.
Base.Math.tanpi
— Functiontanpi(x)
احسب $\tan(\pi x)$ بدقة أكبر من tan(pi*x)
، خاصة للقيم الكبيرة لـ x
.
تتطلب هذه الدالة على الأقل جوليا 1.10.
Base.Math.sincospi
— Functionsincospi(x)
احسب في الوقت نفسه sinpi(x)
و cospi(x)
(جيب الزاوية وجيب التمام لـ π*x
، حيث x
بالراديان)، مع إرجاع زوج مرتب (sine, cosine)
.
هذه الدالة تتطلب جوليا 1.6 أو أحدث.
Base.sinh
— Methodsinh(x)
احسب الجيب الزائد لـ x
.
Base.cosh
— Methodcosh(x)
احسب جيب التمام الزائدي لـ x
.
Base.tanh
— Methodtanh(x)
احسب الظل الزائدي لـ x
.
أمثلة
julia> tanh.(-3:3f0) # هنا 3f0 isa 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)
احسب الجيب العكسي لـ x
، حيث تكون النتيجة بالراديان.
انظر أيضًا asind
للحصول على النتيجة بالدرجات.
أمثلة
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)
احسب جيب التمام العكسي لـ x
، حيث تكون النتيجة بالراديان
Base.atan
— Methodatan(y)
atan(y, x)
احسب الزاوية العكسية لـ y
أو y/x
، على التوالي.
بالنسبة لوسيط حقيقي واحد، هذه هي الزاوية بالراديان بين المحور x الموجب والنقطة (1، y)، مع إرجاع قيمة في الفترة $[-\pi/2, \pi/2]$.
بالنسبة لوسيطين، هذه هي الزاوية بالراديان بين المحور x الموجب والنقطة (x، y)، مع إرجاع قيمة في الفترة $[-\pi, \pi]$. وهذا يتوافق مع دالة atan2
القياسية. لاحظ أنه وفقًا للتقليد، يتم تعريف atan(0.0,x)
كـ $\pi$ و atan(-0.0,x)
كـ $-\pi$ عندما يكون x < 0
.
انظر أيضًا atand
للدرجات.
أمثلة
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)
احسب الجيب العكسي لـ x
، حيث تكون النتيجة بالدرجات. إذا كانت x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.acosd
— Functionacosd(x)
احسب جيب التمام العكسي لـ x
، حيث تكون النتيجة بالدرجات. إذا كان x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.atand
— Functionatand(y)
atand(y,x)
احسب الزاوية العكسية لـ y
أو y/x
، على التوالي، حيث تكون النتيجة بالدرجات.
تدعم طريقة الحجة الواحدة مصفوفات مربعة كحجج اعتبارًا من جوليا 1.7.
Base.Math.sec
— Methodsec(x)
احسب القاطع لـ x
، حيث أن x
بال radians.
Base.Math.csc
— Methodcsc(x)
احسب القاطع العكسي لـ x
، حيث أن x
بال radians.
Base.Math.cot
— Methodcot(x)
احسب قاطع الزاوية لـ x
، حيث أن x
بال radians.
Base.Math.secd
— Functionsecd(x)
احسب القاطع لـ x
، حيث أن x
بالدرجات.
Base.Math.cscd
— Functioncscd(x)
احسب القاطع العكسي لـ x
، حيث أن x
بالدرجات.
Base.Math.cotd
— Functioncotd(x)
احسب قاطع الزاوية لـ x
، حيث أن x
بالدرجات.
Base.Math.asec
— Methodasec(x)
احسب القاطع العكسي لـ x
، حيث تكون النتيجة بال radians.
Base.Math.acsc
— Methodacsc(x)
احسب القيم العكسية للكسينوس المقلوب لـ x
، حيث تكون النتيجة بالراديان.
Base.Math.acot
— Methodacot(x)
احسب القاطع العكسي لـ x
، حيث تكون النتيجة بالراديان.
Base.Math.asecd
— Functionasecd(x)
احسب القاطع العكسي لـ x
، حيث تكون النتيجة بالدرجات. إذا كان x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.acscd
— Functionacscd(x)
احسب القوس العكسي للكسين من x
، حيث تكون النتيجة بالدرجات. إذا كان x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.acotd
— Functionacotd(x)
احسب القاطع العكسي لـ x
، حيث تكون النتيجة بالدرجات. إذا كانت x
مصفوفة، يجب أن تكون x
مصفوفة مربعة.
تتطلب معاملات المصفوفة جوليا 1.7 أو أحدث.
Base.Math.sech
— Methodsech(x)
احسب القاطع الزائد لـ x
.
Base.Math.csch
— Methodcsch(x)
احسب الكوساين الزائد العكسي لـ x
.
Base.Math.coth
— Methodcoth(x)
احسب القاطع الزائد لـ x
.
Base.asinh
— Methodasinh(x)
احسب الجيب الزائد العكسي لـ x
.
Base.acosh
— Methodacosh(x)
احسب جيب التمام العكسي الزائد لـ x
.
Base.atanh
— Methodatanh(x)
احسب الظل المعكوس الزائد لـ x
.
Base.Math.asech
— Methodasech(x)
احسب القاطع الزائد العكسي لـ x
.
Base.Math.acsch
— Methodacsch(x)
احسب القيم العكسية للكسور الزائدية لـ x
.
Base.Math.acoth
— Methodacoth(x)
احسب القاطع الزائف العكسي لـ x
.
Base.Math.sinc
— Functionsinc(x)
احسب دالة سينك العادية $\operatorname{sinc}(x) = \sin(\pi x) / (\pi x)$ إذا كان $x \neq 0$، و$1$ إذا كان $x = 0$.
انظر أيضًا cosc
، مشتقتها.
Base.Math.cosc
— Functioncosc(x)
احسب $\cos(\pi x) / x - \sin(\pi x) / (\pi x^2)$ إذا كان $x \neq 0$، و$0$ إذا كان $x = 0$. هذه هي المشتقة لـ sinc(x)
.
انظر أيضًا sinc
.
Base.Math.deg2rad
— Functiondeg2rad(x)
تحويل x
من الدرجات إلى الراديان.
أمثلة
julia> deg2rad(90)
1.5707963267948966
Base.Math.rad2deg
— FunctionBase.Math.hypot
— Functionhypot(x, y)
احسب الوتر $\sqrt{|x|^2+|y|^2}$ مع تجنب overflow و underflow.
هذا الكود هو تنفيذ للخوارزمية الموصوفة في: خوارزمية محسّنة لـ hypot(a,b)
بواسطة كارلوس ف. بورغيس. المقال متاح على الإنترنت في arXiv على الرابط https://arxiv.org/abs/1904.09481
hypot(x...)
احسب الوتر $\sqrt{\sum |x_i|^2}$ مع تجنب overflow و underflow.
انظر أيضًا norm
في مكتبة LinearAlgebra
القياسية.
أمثلة
julia> a = Int64(10)^10;
julia> hypot(a, a)
1.4142135623730951e10
julia> √(a^2 + a^2) # a^2 يسبب overflow
ERROR: DomainError with -2.914184810805068e18:
sqrt تم استدعاؤه مع حجة حقيقية سالبة ولكن سيعيد فقط نتيجة معقدة إذا تم استدعاؤه مع حجة معقدة. حاول 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)
احسب اللوغاريتم الطبيعي لـ x
.
يرمي DomainError
للوسائط السلبية من نوع Real
. استخدم الوسائط المعقدة للحصول على نتائج معقدة. يحتوي على قطع فرعي على المحور الحقيقي السالب، حيث يُعتبر -0.0im
تحت المحور.
انظر أيضًا ℯ
، log1p
، log2
، log10
.
أمثلة
julia> log(2)
0.6931471805599453
julia> log(-3)
ERROR: DomainError with -3.0:
log تم استدعاؤه مع وسيط حقيقي سالب ولكنه سيعيد نتيجة معقدة فقط إذا تم استدعاؤه مع وسيط معقد. حاول 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)
احسب لوغاريتم الأساس b
لـ x
. يثير DomainError
للوسائط السلبية من نوع Real
.
أمثلة
julia> log(4,8)
1.5
julia> log(4,2)
0.5
julia> log(-2, 3)
ERROR: DomainError with -2.0:
log was called with a negative real argument but will only return a complex result if called with a complex argument. Try log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
julia> log(2, -3)
ERROR: DomainError with -3.0:
log was called with a negative real argument but will only return a complex result if called with a complex argument. Try log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
!!! ملاحظة إذا كان b
قوة من 2 أو 10، يجب استخدام log2
أو log10
، حيث ستكون هذه عادةً أسرع وأكثر دقة. على سبيل المثال،
```jldoctest
julia> log(100,1000000)
2.9999999999999996
julia> log10(1000000)/2
3.0
```
Base.log2
— Functionlog2(x)
احسب لوغاريتم x
بالأساس 2. يثير DomainError
للوسائط السلبية من نوع Real
.
انظر أيضًا: exp2
, ldexp
, ispow2
.
أمثلة
julia> log2(4)
2.0
julia> log2(10)
3.321928094887362
julia> log2(-2)
ERROR: DomainError with -2.0:
log2 تم استدعاؤه مع وسيط حقيقي سالب ولكنه سيعيد نتيجة معقدة فقط إذا تم استدعاؤه مع وسيط معقد. حاول 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)
احسب لوغاريتم x
بالأساس 10. يثير DomainError
للوسائط السلبية من نوع Real
.
أمثلة
julia> log10(100)
2.0
julia> log10(2)
0.3010299956639812
julia> log10(-2)
ERROR: DomainError with -2.0:
log10 تم استدعاؤه مع وسيط حقيقي سالب ولكنه سيعيد نتيجة معقدة فقط إذا تم استدعاؤه مع وسيط معقد. حاول log10(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(f::Symbol, x::Float64) at ./math.jl:31
[...]
Base.log1p
— Functionlog1p(x)
لوغاريتم طبيعي دقيق لـ 1+x
. يرمي DomainError
للوسائط Real
التي تقل عن -1.
أمثلة
julia> log1p(-0.5)
-0.6931471805599453
julia> log1p(0)
0.0
julia> log1p(-2)
ERROR: DomainError with -2.0:
log1p was called with a real argument < -1 but 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:31
[...]
Base.Math.frexp
— Functionfrexp(val)
إرجاع (x,exp)
بحيث يكون x
له مقدار في الفترة $[1/2, 1)$ أو 0، و val
يساوي $x \times 2^{exp}$.
انظر أيضًا significand
، exponent
، ldexp
.
أمثلة
julia> frexp(6.0)
(0.75, 3)
julia> significand(6.0), exponent(6.0) # الفترة [1, 2) بدلاً من ذلك
(1.5, 2)
julia> frexp(0.0), frexp(NaN), frexp(-Inf) # الأس سيكون خطأ
((0.0, 0), (NaN, 0), (-Inf, 0))
Base.exp
— Methodexp(x)
احسب الأس الأساس الطبيعي لـ x
، بعبارة أخرى $ℯ^x$.
أمثلة
julia> exp(1.0)
2.718281828459045
julia> exp(im * pi) ≈ cis(pi)
true
Base.exp2
— Functionexp2(x)
احسب الأس الأساس 2 لـ x
، بعبارة أخرى $2^x$.
أمثلة
julia> exp2(5)
32.0
julia> 2^5
32
julia> exp2(63) > typemax(Int)
true
Base.exp10
— Functionexp10(x)
احسب الأس exponential للقاعدة 10 لـ x
، بعبارة أخرى $10^x$.
أمثلة
julia> exp10(2)
100.0
julia> 10^2
100
Base.Math.ldexp
— FunctionBase.Math.modf
— Functionmodf(x)
إرجاع زوج مرتب (fpart, ipart)
من الأجزاء الكسرية والعددية لرقم. كلا الجزئين لهما نفس إشارة المعطى.
أمثلة
julia> modf(3.5)
(0.5, 3.0)
julia> modf(-3.5)
(-0.5, -3.0)
Base.expm1
— Functionexpm1(x)
احسب بدقة $e^x-1$. يتجنب فقدان الدقة المرتبط بالتقييم المباشر لـ exp(x)-1 للقيم الصغيرة من x.
أمثلة
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)
يقوم بتقريب الرقم x
.
بدون وسائط الكلمات الرئيسية، يتم تقريب x
إلى قيمة صحيحة، مما يعيد قيمة من النوع T
، أو من نفس نوع x
إذا لم يتم توفير T
. سيتم رمي InexactError
إذا كانت القيمة غير قابلة للتعبير عنها بواسطة T
، مشابه لـ convert
.
إذا تم توفير وسائط الكلمات الرئيسية digits
، فإنه يقرب إلى عدد محدد من الأرقام بعد الفاصلة العشرية (أو قبل إذا كانت سالبة)، في الأساس base
.
إذا تم توفير وسائط الكلمات الرئيسية sigdigits
، فإنه يقرب إلى عدد محدد من الأرقام المهمة، في الأساس base
.
تتحكم RoundingMode
r
في اتجاه التقريب؛ الافتراضي هو RoundNearest
، الذي يقرب إلى أقرب عدد صحيح، مع وجود روابط (قيم كسرية تبلغ 0.5) يتم تقريبها إلى أقرب عدد صحيح زوجي. لاحظ أن round
قد يعطي نتائج غير صحيحة إذا تم تغيير وضع التقريب العالمي (انظر rounding
).
عند التقريب إلى نوع نقطة عائمة، سيتم التقريب إلى الأعداد الصحيحة القابلة للتعبير عنها بواسطة هذا النوع (و Inf) بدلاً من الأعداد الصحيحة الحقيقية. يتم التعامل مع Inf كواحد ulp أكبر من floatmax(T)
لأغراض تحديد "الأقرب"، مشابه لـ convert
.
أمثلة
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)
!!! ملاحظة قد يكون التقريب إلى أرقام محددة في قواعد غير 2 غير دقيق عند العمل على أرقام النقاط العائمة الثنائية. على سبيل المثال، القيمة Float64
الممثلة بـ 1.15
هي في الواقع أقل من 1.15، ومع ذلك سيتم تقريبها إلى 1.2. على سبيل المثال:
```jldoctest
julia> x = 1.15
1.15
julia> big(1.15)
1.149999999999999911182158029987476766109466552734375
julia> x < 115//100
true
julia> round(x, digits=1)
1.2
```
التمديدات
لتمديد round
إلى أنواع رقمية جديدة، يكفي عادةً تعريف Base.round(x::NewType, r::RoundingMode)
.
Base.Rounding.RoundingMode
— TypeRoundingMode
نوع يُستخدم للتحكم في وضع التقريب لعمليات النقطة العائمة (عبر rounding
/setrounding
الوظائف)، أو كوسائط اختيارية للتقريب إلى أقرب عدد صحيح (عبر وظيفة round
).
أوضاع التقريب المدعومة حاليًا هي:
RoundNearest
(افتراضي)RoundNearestTiesAway
RoundNearestTiesUp
RoundToZero
RoundFromZero
RoundUp
RoundDown
RoundFromZero
يتطلب على الأقل Julia 1.9. الإصدارات السابقة تدعم RoundFromZero
لـ BigFloat
s فقط.
Base.Rounding.RoundNearest
— ConstantRoundNearest
وضعية التقريب الافتراضية. تقرب إلى أقرب عدد صحيح، مع كون الروابط (القيم الكسرية 0.5) تقرب إلى أقرب عدد صحيح زوجي.
Base.Rounding.RoundNearestTiesAway
— ConstantRoundNearestTiesAway
يقوم بالتقريب إلى أقرب عدد صحيح، مع تقريب الروابط بعيدًا عن الصفر (سلوك round
في C/C++).
Base.Rounding.RoundNearestTiesUp
— ConstantRoundNearestTiesUp
يقرب إلى أقرب عدد صحيح، مع تقريب الروابط نحو اللانهاية الموجبة (سلوك round
في Java/JavaScript).
Base.Rounding.RoundToZero
— ConstantBase.Rounding.RoundFromZero
— ConstantRoundFromZero
يقرّب بعيدًا عن الصفر.
RoundFromZero
يتطلب على الأقل جوليا 1.9. الإصدارات السابقة تدعم RoundFromZero
لـ BigFloat
s فقط.
أمثلة
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)
ارجع أقرب قيمة صحيحة من نفس نوع z
المعقد إلى z
، مع كسر الروابط باستخدام RoundingMode
s المحددة. يتم استخدام RoundingMode
الأول لتقريب المكونات الحقيقية بينما يتم استخدام الثاني لتقريب المكونات التخيلية.
تكون RoundingModeReal
و RoundingModeImaginary
افتراضيًا RoundNearest
، والذي يقرب إلى أقرب عدد صحيح، مع الروابط (القيم الكسرية 0.5) التي يتم تقريبها إلى أقرب عدد صحيح زوجي.
أمثلة
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= [, base = 10])
ceil(x; sigdigits::Integer= [, base = 10])
ceil(x)
يُرجع القيمة الصحيحة الأقرب من نفس نوع x
التي هي أكبر من أو تساوي x
.
ceil(T, x)
يُحوّل النتيجة إلى نوع T
، مما يؤدي إلى إلقاء InexactError
إذا كانت القيمة المقربة غير قابلة للتعبير عنها كـ T
.
تعمل الكلمات الرئيسية digits
و sigdigits
و base
كما في round
.
لدعم ceil
لنوع جديد، عرّف Base.round(x::NewType, ::RoundingMode{:Up})
.
Base.floor
— Functionfloor([T,] x)
floor(x; digits::Integer= [, base = 10])
floor(x; sigdigits::Integer= [, base = 10])
floor(x)
يُرجع أقرب قيمة عددية صحيحة من نفس نوع x
التي هي أقل من أو تساوي x
.
floor(T, x)
يُحوّل النتيجة إلى نوع T
، مما يؤدي إلى حدوث InexactError
إذا كانت القيمة المقربة غير قابلة للتعبير عنها كـ T
.
تعمل الكلمات الرئيسية digits
و sigdigits
و base
كما في round
.
لدعم floor
لنوع جديد، عرّف Base.round(x::NewType, ::RoundingMode{:Down})
.
Base.trunc
— Functiontrunc([T,] x)
trunc(x; digits::Integer= [, base = 10])
trunc(x; sigdigits::Integer= [, base = 10])
trunc(x)
يُرجع أقرب قيمة صحيحة من نفس نوع x
التي تكون قيمتها المطلقة أقل من أو تساوي القيمة المطلقة لـ x
.
trunc(T, x)
يُحوّل النتيجة إلى نوع T
، مما يؤدي إلى إلقاء InexactError
إذا كانت القيمة المقطوعة غير قابلة للتعبير عنها كـ T
.
تعمل الكلمات الرئيسية digits
و sigdigits
و base
كما في round
.
لدعم trunc
لنوع جديد، عرّف Base.round(x::NewType, ::RoundingMode{:ToZero})
.
انظر أيضًا: %
, floor
, unsigned
, unsafe_trunc
.
أمثلة
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)
إرجاع أقرب قيمة عددية صحيحة من النوع T
التي تكون قيمتها المطلقة أقل من أو تساوي القيمة المطلقة لـ x
. إذا كانت القيمة غير قابلة للتمثيل بواسطة T
، سيتم إرجاع قيمة عشوائية. انظر أيضًا trunc
.
أمثلة
julia> unsafe_trunc(Int, -2.2)
-2
julia> unsafe_trunc(Int, NaN)
-9223372036854775808
Base.min
— Functionmin(x, y, ...)
إرجاع الحد الأدنى من المعطيات، مع مراعاة isless
. إذا كان أي من المعطيات هو missing
، إرجع missing
. انظر أيضًا إلى دالة minimum
لأخذ العنصر الأدنى من مجموعة.
أمثلة
julia> min(2, 5, 1)
1
julia> min(4, missing, 6)
missing
Base.max
— Functionmax(x, y, ...)
إرجاع القيمة القصوى من المعطيات، مع مراعاة isless
. إذا كان أي من المعطيات هو missing
، إرجع missing
. انظر أيضًا إلى دالة maximum
لأخذ العنصر الأقصى من مجموعة.
أمثلة
julia> max(2, 5, 1)
5
julia> max(5, missing, 6)
missing
Base.minmax
— Functionminmax(x, y)
إرجاع (min(x,y), max(x,y))
.
انظر أيضًا extrema
التي ترجع (minimum(x), maximum(x))
.
أمثلة
julia> minmax('c','b')
('b', 'c')
Base.clamp
— Functionclamp(x, lo, hi)
إرجاع x
إذا كان lo <= x <= hi
. إذا كان x > hi
، إرجع hi
. إذا كان x < lo
، إرجع lo
. يتم ترقية المعاملات إلى نوع مشترك.
missing
كأول معامل يتطلب على الأقل Julia 1.3.
أمثلة
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) # مثال حيث lo > hi
3-element Vector{Int64}:
6
6
10
clamp(x, T)::T
قم بتقييد x
بين typemin(T)
و typemax(T)
وتحويل النتيجة إلى النوع T
.
انظر أيضًا trunc
.
أمثلة
julia> clamp(200, Int8)
127
julia> clamp(-200, Int8)
-128
julia> trunc(Int, 4pi^2)
39
clamp(x::Integer, r::AbstractUnitRange)
قم بتقييد x
ليكون ضمن النطاق r
.
تتطلب هذه الطريقة على الأقل Julia 1.6.
Base.clamp!
— Functionclamp!(array::AbstractArray, lo, hi)
قيّد القيم في array
إلى النطاق المحدد، في المكان. انظر أيضًا clamp
.
تتطلب الإدخالات missing
في array
على الأقل جوليا 1.3.
أمثلة
julia> row = collect(-4:4)';
julia> clamp!(row, 0, Inf)
1×9 adjoint(::Vector{Int64}) with 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)
القيمة المطلقة لـ x
.
عندما يتم تطبيق abs
على الأعداد الصحيحة الموقعة، قد يحدث تجاوز، مما يؤدي إلى إرجاع قيمة سالبة. يحدث هذا التجاوز فقط عندما يتم تطبيق abs
على الحد الأدنى القابل للتمثيل لقيمة عدد صحيح موقعة. أي، عندما x == typemin(typeof(x))
، فإن abs(x) == x < 0
، وليس -x
كما قد يتوقع.
انظر أيضًا: abs2
، unsigned
، sign
.
أمثلة
julia> abs(-3)
3
julia> abs(1 + im)
1.4142135623730951
julia> abs.(Int8[-128 -127 -126 0 126 127]) # تجاوز عند typemin(Int8)
1×6 Matrix{Int8}:
-128 127 126 0 126 127
julia> maximum(abs, [1, -2, 3, -4])
4
Base.Checked
— Moduleتم التحقق
يوفر نموذج Checked دوال حسابية لأنواع الأعداد الصحيحة الموقعة وغير الموقعة المدمجة والتي ترمي خطأً عند حدوث تجاوز. وهي مسماة مثل checked_sub
و checked_div
، إلخ. بالإضافة إلى ذلك، فإن add_with_overflow
و sub_with_overflow
و mul_with_overflow
تعيد كل من النتائج غير المراقبة وقيمة منطقية تشير إلى وجود تجاوز.
Base.Checked.checked_abs
— FunctionBase.checked_abs(x)
يحسب abs(x)
، مع التحقق من أخطاء تجاوز السعة حيثما كان ذلك مناسبًا. على سبيل المثال، لا يمكن للأعداد الصحيحة الموقعة بتكملة اثنين القياسية (مثل Int
) تمثيل abs(typemin(Int))
، مما يؤدي إلى تجاوز السعة.
قد يفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_neg
— FunctionBase.checked_neg(x)
يحسب -x
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك. على سبيل المثال، لا يمكن للأعداد الصحيحة الموقعة بتكملة اثنين القياسية (مثل Int
) تمثيل -typemin(Int)
، مما يؤدي إلى تجاوز السعة.
قد تفرض حماية التجاوز عقوبة أداء ملحوظة.
Base.Checked.checked_add
— FunctionBase.checked_add(x, y)
يحسب x+y
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية التجاوز عقوبة أداء ملحوظة.
Base.Checked.checked_sub
— FunctionBase.checked_sub(x, y)
يحسب x-y
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية التجاوز عقوبة أداء ملحوظة.
Base.Checked.checked_mul
— FunctionBase.checked_mul(x, y)
يحسب x*y
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_div
— FunctionBase.checked_div(x, y)
يحسب div(x,y)
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_rem
— FunctionBase.checked_rem(x, y)
يحسب x%y
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية التجاوز عقوبة أداء ملحوظة.
Base.Checked.checked_fld
— FunctionBase.checked_fld(x, y)
يحسب fld(x,y)
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_mod
— FunctionBase.checked_mod(x, y)
يحسب mod(x,y)
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_cld
— FunctionBase.checked_cld(x, y)
يحسب cld(x,y)
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.checked_pow
— FunctionBase.checked_pow(x, y)
يحسب ^(x,y)
، مع التحقق من أخطاء تجاوز السعة حيثما ينطبق ذلك.
قد تفرض حماية تجاوز السعة عقوبة أداء ملحوظة.
Base.Checked.add_with_overflow
— FunctionBase.add_with_overflow(x, y) -> (r, f)
يحسب r = x+y
، مع العلم أن العلم f
يشير إلى ما إذا كان قد حدث تجاوز.
Base.Checked.sub_with_overflow
— FunctionBase.sub_with_overflow(x, y) -> (r, f)
يحسب r = x-y
، مع العلم أن العلم f
يشير إلى ما إذا كان قد حدث تجاوز.
Base.Checked.mul_with_overflow
— FunctionBase.mul_with_overflow(x, y) -> (r, f)
يحسب r = x*y
، مع العلم أن العلم f
يشير إلى ما إذا كان قد حدث تجاوز.
Base.abs2
— Functionabs2(x)
القيمة المطلقة المربعة لـ x
.
يمكن أن تكون هذه الطريقة أسرع من abs(x)^2
، خاصة للأعداد المركبة حيث تتطلب abs(x)
جذرًا تربيعيًا عبر hypot
.
أمثلة
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
ارجع z
الذي له مقدار x
ونفس إشارة y
.
أمثلة
julia> copysign(1, -2)
-1
julia> copysign(-1, 2)
1
Base.sign
— Functionsign(x)
ارجع صفر إذا كان x==0
و $x/|x|$ خلاف ذلك (أي ±1 لـ x
الحقيقي).
انظر أيضًا signbit
، zero
، copysign
، flipsign
.
أمثلة
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)
ارجع true
إذا كانت قيمة إشارة x
سالبة، وإلا false
.
أمثلة
julia> signbit(-4)
true
julia> signbit(5)
false
julia> signbit(5.5)
false
julia> signbit(-4.1)
true
Base.flipsign
— Functionflipsign(x, y)
إرجاع x
مع عكس إشارته إذا كان y
سالبًا. على سبيل المثال abs(x) = flipsign(x,x)
.
أمثلة
julia> flipsign(5, 3)
5
julia> flipsign(5, -3)
-5
Base.sqrt
— Method√(x)
ارجع $\sqrt{x}$.
يرمي DomainError
للوسائط السلبية من نوع Real
. استخدم الوسائط السلبية المعقدة بدلاً من ذلك. لاحظ أن sqrt
لديه قطع فرعي على المحور الحقيقي السالب.
المشغل البادئ √
يعادل sqrt
.
انظر أيضًا: hypot
.
أمثلة
julia> sqrt(big(81))
9.0
julia> sqrt(big(-81))
ERROR: DomainError with -81.0:
NaN result for non-NaN input.
Stacktrace:
[1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]
julia> sqrt(big(complex(-81)))
0.0 + 9.0im
julia> sqrt(-81 - 0.0im) # -0.0im هو أدنى من القطع الفرعي
0.0 - 9.0im
julia> .√(1:4)
4-element Vector{Float64}:
1.0
1.4142135623730951
1.7320508075688772
2.0
Base.isqrt
— Functionisqrt(n::Integer)
جذر مربع صحيح: أكبر عدد صحيح m
بحيث m*m <= n
.
julia> isqrt(5)
2
Base.Math.cbrt
— Methodcbrt(x::Real)
إرجاع الجذر التكعيبي لـ x
، أي $x^{1/3}$. القيم السلبية مقبولة (مع إرجاع الجذر الحقيقي السالب عندما يكون $x < 0$).
المشغل البادئ ∛
يعادل cbrt
.
أمثلة
julia> cbrt(big(27))
3.0
julia> cbrt(big(-27))
-3.0
Base.real
— Functionreal(z)
إرجاع الجزء الحقيقي من العدد المركب z
.
انظر أيضًا: imag
, reim
, complex
, isreal
, Real
.
أمثلة
julia> real(1 + 3im)
1
real(T::Type)
إرجاع النوع الذي يمثل الجزء الحقيقي من قيمة من النوع T
. على سبيل المثال: لـ T == Complex{R}
، إرجاع R
. يعادل typeof(real(zero(T)))
.
أمثلة
julia> real(Complex{Int})
Int64
julia> real(Float64)
Float64
real(A::AbstractArray)
إرجاع مصفوفة تحتوي على الجزء الحقيقي من كل عنصر في المصفوفة A
.
يعادل real.(A)
، باستثناء أنه عندما يكون eltype(A) <: Real
يتم إرجاع A
دون نسخ، وعندما تكون A
ذات أبعاد صفرية، يتم إرجاع مصفوفة ذات أبعاد صفرية (بدلاً من عدد حقيقي).
أمثلة
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)
إرجاع الجزء التخيلي من العدد المركب z
.
انظر أيضًا: conj
, reim
, adjoint
, angle
.
أمثلة
julia> imag(1 + 3im)
3
imag(A::AbstractArray)
إرجاع مصفوفة تحتوي على الجزء التخيلي من كل عنصر في المصفوفة A
.
يعادل imag.(A)
، باستثناء أنه عندما تكون A
ذات أبعاد صفرية، يتم إرجاع مصفوفة ذات أبعاد صفرية (بدلاً من عدد حقيقي).
أمثلة
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)
إرجاع مجموعة من الأجزاء الحقيقية والتخييلية للعدد المركب z
.
أمثلة
julia> reim(1 + 3im)
(1, 3)
reim(A::AbstractArray)
إرجاع مجموعة من مصفوفتين تحتويان على الجزء الحقيقي والجزء التخيلي لكل عنصر في A
.
معادل لـ (real.(A), imag.(A))
، باستثناء أنه عندما يكون eltype(A) <: Real
يتم إرجاع A
دون نسخ لتمثيل الجزء الحقيقي، وأنه عندما يكون لـ A
أبعاد صفرية، يتم إرجاع مصفوفة ذات أبعاد صفرية (بدلاً من عدد).
أمثلة
julia> reim([1, 2im, 3 + 4im])
([1, 0, 3], [0, 2, 4])
julia> reim(fill(2 - im))
(fill(2), fill(-1))
Base.conj
— Functionconj(A::AbstractArray)
إرجاع مصفوفة تحتوي على المرافق العقدي لكل عنصر في المصفوفة A
.
يعادل conj.(A)
، باستثناء أنه عندما يكون eltype(A) <: Real
يتم إرجاع A
دون نسخ، وعندما تكون A
ذات أبعاد صفرية، يتم إرجاع مصفوفة ذات أبعاد صفرية (بدلاً من عدد حقيقي).
أمثلة
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)
احسب زاوية الطور بالراديان لعدد مركب z
.
ترجع عددًا بحيث -pi ≤ angle(z) ≤ pi
، وبالتالي فهي غير مستمرة على طول المحور الحقيقي السالب.
انظر أيضًا: atan
، cis
، rad2deg
.
أمثلة
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)
طريقة أكثر كفاءة لـ exp(im*x)
باستخدام صيغة أويلر: $\cos(x) + i \sin(x) = \exp(i x)$.
انظر أيضًا cispi
, sincos
, exp
, angle
.
أمثلة
julia> cis(π) ≈ -1
true
Base.cispi
— Functioncispi(x)
طريقة أكثر دقة لـ cis(pi*x)
(خصوصًا للقيم الكبيرة لـ x
).
انظر أيضًا cis
, sincospi
, exp
, angle
.
أمثلة
julia> cispi(10000)
1.0 + 0.0im
julia> cispi(0.25 + 1im)
0.030556854645954562 + 0.03055685464595456im
هذه الدالة تتطلب Julia 1.6 أو أحدث.
Base.binomial
— Functionbinomial(n::Integer, k::Integer)
معامل ثنائي $\binom{n}{k}$، وهو معامل الحد $k$ في توسيع كثيرات الحدود لـ $(1+x)^n$.
إذا كان $n$ غير سالب، فإنه يمثل عدد الطرق لاختيار k
من n
عنصر:
\[\binom{n}{k} = \frac{n!}{k! (n-k)!}\]
حيث $n!$ هو دالة factorial
.
إذا كان $n$ سالبًا، فإنه يُعرف من خلال الهوية
\[\binom{n}{k} = (-1)^k \binom{k-n-1}{k}\]
انظر أيضًا factorial
.
أمثلة
julia> binomial(5, 3)
10
julia> factorial(5) ÷ (factorial(5-3) * factorial(3))
10
julia> binomial(-5, 3)
-35
روابط خارجية
- معامل ثنائي على ويكيبيديا.
```
binomial(x::Number, k::Integer)
معامل ثنائي عام، معرف لـ k ≥ 0
بواسطة كثير الحدود
\[\frac{1}{k!} \prod_{j=0}^{k-1} (x - j)\]
عندما يكون k < 0
، فإنه يُرجع صفر.
في حالة x
الصحيحة، فإن هذا يعادل معامل ثنائي صحيح عادي
\[\binom{n}{k} = \frac{n!}{k! (n-k)!}\]
التعميمات الإضافية لـ k
غير الصحيح ممكنة رياضيًا، ولكنها تتضمن دالة غاما و/أو دالة بيتا، والتي ليست متوفرة في مكتبة جوليا القياسية ولكنها متاحة في حزم خارجية مثل SpecialFunctions.jl.
روابط خارجية
- معامل ثنائي على ويكيبيديا.
Base.factorial
— Functionfactorial(n::Integer)
عامل n
. إذا كان n
هو Integer
، يتم حساب العامل كعدد صحيح (يرتفع إلى 64 بت على الأقل). لاحظ أن هذا قد يتجاوز الحد إذا لم يكن n
صغيرًا، ولكن يمكنك استخدام factorial(big(n))
لحساب النتيجة بدقة في دقة تعسفية.
انظر أيضًا binomial
.
أمثلة
julia> factorial(6)
720
julia> factorial(21)
ERROR: OverflowError: 21 is too large to look up in the table; consider using `factorial(big(21))` instead
Stacktrace:
[...]
julia> factorial(big(21))
51090942171709440000
روابط خارجية
- عامل على ويكيبيديا.
```
Base.gcd
— Functiongcd(x, y...)
أكبر قاسم مشترك (موجب) (أو صفر إذا كانت جميع المعطيات صفر). يمكن أن تكون المعطيات أعداد صحيحة وأعداد كسرية.
تتطلب المعطيات الكسرية Julia 1.4 أو أحدث.
أمثلة
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...)
أقل مضاعف مشترك (موجب) (أو صفر إذا كان أي من المعطيات صفر). يمكن أن تكون المعطيات أعداد صحيحة وأعداد كسرية.
تتطلب المعطيات الكسرية Julia 1.4 أو أحدث.
أمثلة
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)
يحسب القاسم المشترك الأكبر (الإيجابي) لـ a
و b
ومعاملات بيزوت الخاصة بهم، أي المعاملات الصحيحة u
و v
التي تحقق $ua+vb = d = gcd(a, b)$. ترجع gcdx(a, b)
القيمة $(d, u, v)$.
يمكن أن تكون المعطيات أعدادًا صحيحة أو أعدادًا كسرية.
تتطلب المعطيات الكسرية وجود Julia 1.4 أو أحدث.
أمثلة
julia> gcdx(12, 42)
(6, -3, 1)
julia> gcdx(240, 46)
(2, -9, 47)
معاملات بيزوت ليست محددة بشكل فريد. ترجع gcdx
معاملات بيزوت الدنيا التي يتم حسابها بواسطة خوارزمية إقليدس الممتدة. (مرجع: د. كنوت، TAoCP، 2/e، ص. 325، الخوارزمية X.) بالنسبة للأعداد الصحيحة الموقعة، تكون هذه المعاملات u
و v
دنيا بمعنى أن $|u| < |b/d|$ و $|v| < |a/d|$. علاوة على ذلك، يتم اختيار إشارات u
و v
بحيث يكون d
إيجابيًا. بالنسبة للأعداد الصحيحة غير الموقعة، قد تكون المعاملات u
و v
قريبة من typemax
، وتكون الهوية صحيحة فقط عبر حساب الأعداد الصحيحة غير الموقعة.
Base.ispow2
— Functionispow2(n::Number) -> Bool
اختبر ما إذا كان n
هو قوة صحيحة من اثنين.
انظر أيضًا count_ones
، prevpow
، nextpow
.
أمثلة
julia> ispow2(4)
true
julia> ispow2(5)
false
julia> ispow2(4.5)
false
julia> ispow2(0.25)
true
julia> ispow2(1//8)
true
تم إضافة الدعم للوسائط غير Integer
في Julia 1.6.
Base.nextpow
— Functionnextpow(a, x)
أصغر a^n
ليس أقل من x
، حيث n
هو عدد صحيح غير سالب. يجب أن يكون a
أكبر من 1، و x
يجب أن يكون أكبر من 0.
انظر أيضًا prevpow
.
أمثلة
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)
أكبر a^n
ليس أكبر من x
، حيث n
هو عدد صحيح غير سالب. يجب أن يكون a
أكبر من 1، ويجب ألا يكون x
أقل من 1.
أمثلة
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
الذي يمكن كتابته كـ $\prod k_i^{p_i}$ لأعداد صحيحة $p_1$، $p_2$، وما إلى ذلك، لعوامل $k_i$ في factors
.
أمثلة
julia> nextprod((2, 3), 105)
108
julia> 2^2 * 3^3
108
الطريقة التي تقبل مجموعة تتطلب Julia 1.6 أو أحدث.
Base.invmod
— Functioninvmod(n::Integer, m::Integer)
خذ المعكوس لـ n
بالنسبة لـ m
: y
بحيث $n y = 1 \pmod m$، و $div(y,m) = 0$. سيؤدي هذا إلى حدوث خطأ إذا كان $m = 0$، أو إذا كان $gcd(n,m) \neq 1$.
أمثلة
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}
احسب المعكوس المودولي لـ n
في حلقة الأعداد الصحيحة من النوع T
، أي المودولوس 2^N
حيث N = 8*sizeof(T)
(على سبيل المثال، N = 32
لـ Int32
). بعبارة أخرى، هذه الطرق تلبي الهويات التالية:
n * invmod(n) == 1
(n * invmod(n, T)) % T == 1
(n % T) * invmod(n, T) == 1
لاحظ أن *
هنا هو ضرب مودولي في حلقة الأعداد الصحيحة، T
.
تحديد المودولوس الذي ينطوي عليه نوع عدد صحيح كقيمة صريحة غالبًا ما يكون غير مريح حيث أن المودولوس، بحكم التعريف، كبير جدًا بحيث لا يمكن تمثيله بواسطة النوع.
يتم حساب المعكوس المودولي بكفاءة أكبر بكثير من الحالة العامة باستخدام الخوارزمية الموضحة في https://arxiv.org/pdf/2204.04342.pdf.
تتطلب طرق invmod(n)
و invmod(n, T)
وجود Julia 1.11 أو أحدث.
Base.powermod
— Functionpowermod(x::Integer, p::Integer, m)
احسب $x^p \pmod m$.
أمثلة
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)
احسب عدد الأرقام في العدد الصحيح n
المكتوب في الأساس base
(يجب ألا يكون base
في [-1, 0, 1]
)، مع إمكانية إضافة أصفار إلى حجم محدد (لن يكون الناتج أقل من pad
).
انظر أيضًا digits
، count_ones
.
أمثلة
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)
عامل الاختزال المستخدم في sum
. الفرق الرئيسي عن +
هو أن الأعداد الصحيحة الصغيرة يتم ترقيتها إلى Int
/UInt
.
Base.widemul
— Functionwidemul(x, y)
اضرب x
و y
، مع إعطاء النتيجة كنوع أكبر.
انظر أيضًا promote
، Base.add_sum
.
أمثلة
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)
قيم كثير الحدود $\sum_k x^{k-1} p[k]$ للمعاملات p[1]
, p[2]
, ...؛ أي أن المعاملات تُعطى بترتيب تصاعدي حسب قوة x
. يتم فك الحلقات في وقت الترجمة إذا كان عدد المعاملات معروفًا ثابتًا، أي عندما تكون p
عبارة عن Tuple
. هذه الدالة تولد كودًا فعالًا باستخدام طريقة هورنر إذا كان x
حقيقيًا، أو باستخدام خوارزمية مشابهة لـ Goertzel إذا كان x
مركبًا.
هذه الدالة تتطلب Julia 1.4 أو أحدث.
أمثلة
julia> evalpoly(2, (1, 2, 3))
17
Base.Math.@evalpoly
— Macro@evalpoly(z, c...)
قيم كثير الحدود $\sum_k z^{k-1} c[k]$ للمعاملات c[1]
, c[2]
, ...؛ أي أن المعاملات تُعطى بترتيب تصاعدي حسب قوة z
. هذا الماكرو يتوسع إلى كود مدمج فعال يستخدم إما طريقة هورنر أو، بالنسبة لـ z
المعقد، خوارزمية أكثر كفاءة تشبه خوارزمية غورتزل.
انظر أيضًا evalpoly
.
أمثلة
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
نفذ نسخة محولة من التعبير، والتي تستدعي دوال قد تنتهك دقة معايير IEEE الصارمة. هذا يسمح بأسرع عملية ممكنة، ولكن النتائج غير محددة - كن حذرًا عند القيام بذلك، حيث قد يغير النتائج العددية.
هذا يضبط علامات سرعة LLVM، ويتوافق مع خيار -ffast-math
في clang. انظر ملاحظات حول تعليقات الأداء لمزيد من التفاصيل.
أمثلة
julia> @fastmath 1+2
3
julia> @fastmath(sin(3))
0.1411200080598672
Customizable binary operators
بعض أحرف اليونيكود يمكن استخدامها لتعريف عوامل ثنائية جديدة تدعم الصيغة المتداخلة. على سبيل المثال ⊗(x,y) = kron(x,y)
تعرف دالة ⊗
(أوتينس) لتكون حاصل ضرب كرونكر، ويمكن استدعاؤها كعامل ثنائي باستخدام صيغة متداخلة: C = A ⊗ B
بالإضافة إلى الصيغة السابقة المعتادة C = ⊗(A,B)
.
تشمل الشخصيات الأخرى التي تدعم مثل هذه الإضافات \odot ⊙
و \oplus ⊕
القائمة الكاملة موجودة في كود المحلل: https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm
تلك التي يتم تحليلها مثل *
(من حيث الأولوية) تشمل * / ÷ % & ⋅ ∘ × |\\| ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇ ⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻ ⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗
وتلك التي يتم تحليلها مثل +
تشمل + - |\|| ⊕ ⊖ ⊞ ⊟ |++| ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⟇ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣
هناك العديد من الآخرين المرتبطين بالأسهم، والمقارنات، والقدرات.
- DK62دونالد كنوت، فن برمجة الكمبيوتر، المجلد 2: الخوارزميات شبه العددية، القسم 4.6.4.