عملیات ریاضی و توابع اولیه¶
زبان برنامه نویسی جولیا یک مجموعه کامل از عملگرهای محاسباتی و بیتی اولیه برای کار بر روی نوعهای عددی اولیه را فراهم نموده است. همچنین پیادهسازیهای بهینه از یک مجموعه همه جانبه از توابع استاندارد ریاضی ارائه میدهد.
عملگرهای محاسباتی¶
عملگرهای محاسباتی زیر برای تمامی نوعهای عددی اولیه پشتیبانی میشوند:
نماد | نام | توضیحات |
---|---|---|
+x |
جمع یگانی | عمل همانی |
-x |
تفریق یگانی | مقادیر را به وارون جمعیشان تبدیل میکند |
x + y |
جمع باینری | عمل جمع |
x - y |
تفریق باینری | عمل تفریق |
x * y |
ضرب | عمل ضرب |
x / y |
تقسیم | عمل تقسیم |
x ÷ y |
تقسیم صحیح | قسمت صحیح x / y را بر میگرداند |
x \ y |
تقسیم بالعکس | معادل با x / y است |
x ^ y |
توان | x را به توان y میرساند |
x % y |
باقیمانده | معادل با rem(x,y) است |
یک لیترال عددی که دقیقا قبل از یک متغیر یا پرانتز قرار گرفته است، برای مثال در 2x
یا 2(x+y)
، به صورت عمل ضرب در نظر گرفته میشود، که اولویت بالاتری نسبت به سایر عملیاتهای باینری دارد.
سیستم ارتقاء جولیا به صورت طبیعی و خود به خودی(اتوماتیک) عملگرهای محاسباتی را برای مخلوطی از نوعها مدیریت کرده و به درستی کار میکنند. برای اطلاع بیشتر در مورد سیستم ارتقاء، بخش [تبدیل و ارتقاء](@ref conversion-and-promotion) را ببیند.
چند مثال ساده را در زیر مشاهده میکنید:
julia> 1 + 2 + 3
6
julia> 1 - 2
-1
julia> 3*2/12
0.5
(طبق قرار داد، برای استحکام بیشتر در بیان عملگرها، ما آنها را در نزدیکترین حالت به عملوندشان، قبل از عملوند قرار میدهیم. برای مثال، ما معمولاً باید بنویسیم x+2-
تا ابتدا مقدار x
را منفی کرده و سپس 2
را به آن اضافه کنیم.)
در عمل ضرب، false
به صورت یک صفر قوی عمل میکند.
julia> NaN * false
0.0
julia> false * Inf
0.0
این کار برای پیشگیری از انتشار مقادیر NaN
در کمیتهایی که میدانیم برابر صفر هستند، استفاده میشود. برای اطلاعات بیشتر Knuth (1992) را ببینید.
عملگرهای بولی¶
عملگرهای بولی زیر روی نوع Bool
اعمال می شوند:
نماد | توضیحات |
---|---|
!x |
منفی کردن |
x && y |
و اتصال کوتاه |
x \|\| y |
یا اتصال کوتاه |
عمل منفی کردن true
را به false
تبدیل میکند و برعکس. عملیاتهای اتصال کوتاه در صفحهی لینکشده توضیح داده شدهاند.
توجه کنید که Bool
یک نوع از عدد صحیح است و همه روابط ارتقا و عملگرهای عددی روی آن تعریف میشوند.
عملگرهای بیتی¶
عملگرهای محاسباتی زیر برای تمامی نوعهای صحیح اولیه پشتیبانی میشوند:
توضیحات | نماد |
---|---|
~x |
عمل not به صورت بیت به بیت |
x & y |
عمل and به صورت بیتی |
x \| y |
عمل or به صورت بیتی |
x ⊻ y |
عمل xor بیتی |
x >>> y |
شیفت منطقی به سمت راست |
x >> y |
شیفت محاسباتی به سمت راست |
x << y |
شیفت منطقی/محاسباتی به سمت چپ |
مثالهایی از عملگرهای بیتی در جولیا:
julia> ~123
-124
julia> 123 & 234
106
julia> 123 | 234
251
julia> 123 ⊻ 234
145
julia> xor(123, 234)
145
julia> ~UInt32(123)
0xffffff84
julia> ~UInt8(123)
0x84
عملگرهای بروزرسان¶
تمام عملگرهای باینری محاسباتی و بیتی یک حالت بروز رسانی دارند که نتایج عملیات را در عملوند سمت چپ خود میریزند. حالت بروزرسانی عملگرهای باینری به وسیله استفاده بدون واسطه از =
پس از عملگر، به کار گرفته میشود. برای نمونه، نوشتن x+=3
معادل است با نوشتن x=x+3
:
julia> x = 1
1
julia> x += 3
4
julia> x
4
حالت بروزرسانی تمام عملگرهای محاسباتی و بیتی به صورت زیر هستند:
+= -= *= /= \= ÷= %= ^= &= |= ⊻= >>>= >>= <<=
توجه
یک عملگر بروزرسانی متغیر سمت چپ را بازنویسی میکند. در نتیجه، ممکن است نوع آن متغیر عوض شود.
julia> x = 0x01; typeof(x)
UInt8
julia> x *= 2 # x = x * 2 همان
2
julia> typeof(x)
Int64
عملگرهای نقطهای برداری¶
برای تمامی عملیاتهای باینری مانند ^
، یک عملیات متناظر نقطهای ^.
وجود دارد که به صورت خود به خودی(اتوماتیک) عمل ^
را بر روی تک تک المانهای یک آرایه اعمال میکند. برای مثال، عبارت 3^[1,2,3]
تعریف نشده است زیرا مکعب یک ارایه (ارایه غیر مربعی) تعریف استاندارد ریاضیاتی ندارد. اما 3^.[1,2,3]
به صورت محاسبهی المانی(یا برداری) [3^3, 3^2, 3^1]
تعریف شده است. به طور مشابه برای عملگرهای یگانی مانند !
یا √
نیز √.
وجود دارد که عملیات را به صورت المانی اجرا میکند.
julia> [1,2,3] .^ 3
3-element Vector{Int64}:
1
8
27
به طور دقیقتر، a.^b
(این عبارت یعنی تک تک المانهای آرایه a
به توان المان متناظر آن در آرایه b
برسد. یعنی المان اول a
به توان المان اول b
و المان دوم a
به توان المان دوم b
و…) به صورت [فراخوانی نقطهای](@ref man-vectorized)
(a,b).(^)
شناخته میشود که یک عملیات [گسترش](@ref Broadcasting) را اجرا میکند: این عملیات میتواند میان آرایهها و اسکالرها، آرایههای هم اندازه (انجام عملیات به صورت المانی) و حتی میان آرایههایی با اشکال مختلف(مثلاً ترکیب بردارهای ستونی و ردیفی برای ساخت ماتریس) اعمال شود. علاوه بر این، مانند تمام فراخوانیهای نقطهای برداری(المانی)، این عملگرهای نقطهای نیز همپوش هستند. برای مثال، اگر شما 2 .* A.^2 .+ sin.(A)
(که معادل با @. 2A^2 + sin(A)
است و ماکروی [.@
](@ref @dot) macro) در آن استفاده شده است) را برای آرایهای مانند A
محاسبه کنید، یک تک حلقه روی A
اجرا میشود که 2a^2 + sin(a)
را برای هر المان از A
محاسبه میکند. به طور خاص، فراخوانی نقطهای تودرتو مانند f.(g.(x))
همپوشانی شده است و این یعنی عملگرهای باینری مجاور مانند x.+ 3.*x.^2
با فراخوانی نقطهای تودرتوی (+).(x, (*).(3, (^).(x, 2)))
معادل هستند.
علاوه بر این موارد، عملگرهای بروزرسان نقطهای مانند a.+=b
(یا a+=b.@
) به صورت a.=a.+b
اجرا میشوند، که در آن =.
یک عملیات تخصیص در محل همپوشانی شده است (نوشته [نحو نقطهای]((@ref man-vectorized)) را ببینید).
دقت کنید که نحو(سینتکس) نقطهای برای عملگرهای تعریف شده توسط کاربر نیز قابل استفاده است. برای مثال اگر شما ⊗(A,B) = kron(A,B)
را به منظور عمل A ⊗ B
برای داشتن یک سینتکس راحت برای ضرب کرونر تعریف کنید، پس از آن بدون هیچ کد اضافهای شما میتوانید [C,D]⊗.[A,B]
را برای محاسبه [A⊗C,B⊗D]
بیان کنید.
ترکیب عملگرهای نقطهای با لیترالهای عددی میتواند ابهام آور باشد. به طور مثال، معلوم نیست که منظور از عبارت 1.+x
به صورت 1. + x
است یا 1 .+ x
. در نتیجه این نوع نحوه بیان مجاز نیست و حتماً باید به وسیله فضای خالی میان عملگر نقطه و عملوندهایش در چنین مواردی فاصله ایجاد کنید.
مقایسات عددی¶
عملگرهای مقایسهای استاندارد برای تمام نوعهای عددی اولیه تعریف شدهاند:
عملگر | توضیحات |
---|---|
== |
برابری |
!= , ≠ |
نابرابری |
< |
کوچکتر |
<= , ≤ |
کوچتر یا مساوی |
> |
بزرگتر |
>= , ≥ |
بزرگتر یا مساوی |
در اینجا چند مثال ساده را مشاهده میکنید:
julia> 1 == 1
true
julia> 1 == 2
false
julia> 1 != 2
true
julia> 1 == 1.0
true
julia> 1 < 2
true
julia> 1.0 > 3
false
julia> 1 >= 1.0
true
julia> -1 <= 1
true
julia> -1 <= -1
true
julia> -1 <= -2
false
julia> 3 < -0.5
false
اعداد صحیح به صورت استاندارد با مقایسهی بیتها مورد سنجش قرار داده میشوند. اعداد ممیز شناور نیز با توجه به استاندارد IEEE 754 مقایسه می شوند:
- ترتیب اعداد متناهی، به همان صورت معمول است.
- صفر مثبت برابر است با صفر منفی اما از آن بزرگتر نیست.
Inf
با خودش برابر و از هر چیز دیگری بجزNaN
بزرگتر است.Inf
با خودش برابر و از هر چیز دیگری بجزNaN
کوچکتر است.NaN
نه با چیزی برابر، نه از چیزی بزرگتر و نه کوچکتر است. این گزاره شامل خودش هم میشود.
نکته آخر بسیار شگفت انگیز است و ارزش دقت دارد:
julia> NaN == NaN
false
julia> NaN != NaN
true
julia> NaN < NaN
false
julia> NaN > NaN
false
این نکته در کار با [آرایهها](@ref man-multi-dim-arrays) میتواند موجب کمی سردرد شود:
julia> [1 NaN] == [1 NaN]
false
جولیا توابعی اضافی برای آزمون اعداد در مقادیر خاص فراهم کرده است که میتواند در موقعیتهایی مانند مقایسههای کلید هش استفاده شود:
تابع | تست میکند که |
---|---|
isequal(x, y) |
آیا x و x یکسان هستند؟ |
isfinite(x) |
آیا x یک عدد متناهی است؟ |
isinf(x) |
آیا x بینهایت است؟ |
isnan(x) |
آیا x یک عدد نیست؟ |
isequal
متغیر NaN
را برابر با خودش در نظر میگیرد:
julia> isequal(NaN, NaN)
true
julia> isequal([1 NaN], [1 NaN])
true
julia> isequal(NaN, NaN32)
true
isequal
همچنین میتواند برای تمییز دادن صفرهای علامتدار استفاده شود:
julia> -0.0 == 0.0
true
julia> isequal(-0.0, 0.0)
false
مقایسات ترکیبی میان اعداد صحیح علامتدار، اعداد صحیح بدون علامت و اعداد اعشاری میتواند گول زننده باشد. مراقبتهای زیادی انجام شده است تا اطمینان حاصل شود که جولیا آنها را به درستی انجام میدهد.
برای بقیه نوعها، isequal
به صورت پیشفرض ==
را صدا میزند؛ بنابراین اگر شما میخواهید برابری برای نوعهای خود را بسنجید، کافیست از متد ==
استفاده کنید. اگر شما میخواهید تابع سنجش برابری خودتان را تعریف کنید، بهتر است یک تابع hash
متناظر تعریف کنید تا اطمینان حاصل شود که (isequal(x,y
برابری (hash(x)==hash(y
را میرساند.
مقایسههای زنجیرهای¶
بر خلاف بسیاری از زبان ها به استثنای پایتون، مقایسهها میتوانند به طور دلخواه به صورت زنجیرهای استفاده شوند:
julia> 1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5
true
استفاده از مقایسههای زنجیرهای در کدهای عددی، اغلب باعث راحتی بسیاری میشود. این مقایسهها از عملگر &&
برای سنجشهای اسکالر و از عملگر &
برای سنجشهای المانی استفاده میکنند که این کار اجازه میدهد تا بر روی آرایهها نیز عمل کنند. برای مثال عبارت 0 .< A .< 1
یک ارایه بولی نتیجه میدهد که درایههایی که true هستند، نشان میدهند که درایههای متناظر آن در A
بین صفر و یک هستند.
به نحوهی رفتار ارزیابی در مقایسههای زنجیرهای توجه داشته باشید:
julia> v(x) = (println(x); x)
v (generic function with 1 method)
julia> v(1) < v(2) <= v(3)
2
1
3
true
julia> v(1) > v(2) <= v(3)
2
1
false
عبارتی که در وسط آمده است فقط یک بار ارزیابی میشود، و اگر عبارت به صورت v(1) < v(2) && v(2) <= v(3)
نوشته شدهبود، دوبار ارزیابی میشد. با این حال، ترتیب ارزیابیها در یک مقایسه زنجیرهای تعریف نشده است. به شدت توصیه میشود که از عباراتی با عوارض جانبی (مانند چاپ) در مقایسههای زنجیرهای بپرهیزید. اگر به عباراتی برای عوارض جانبی نیاز داشتید، از عملگر &&
اتصال-کوتاه به طور صریح استفاده کنید (نوشته ارزیابی اتصال-کوتاه را ببینید).
توابع ابتدایی¶
جولیا یک مجموعهی جامع از توابع و عملگرهای ریاضی را فراهم کرده است. این عملگرهای ریاضی به عنوان یک کلاس گسترده از مقادیر عددی به عنوان تعاریف منطقی اولیه تعریف شده و اعداد صحیح، ممیز شناور، حقیقی و مختلط را، هر کجایی که این تعاریف معنی داشته باشند، ارائه میدهد.
علاوه بر این، این توابع(مانند هر تابع دیگر جولیا) میتوانند با استفاده از [نحو(سینتکس) نقطهای](@ref man-vectorized)
f.(A)
به صورت برداری(المانی) بر روی آرایهها و دیگر مجموعهها اعمال شوند. برای مثال sin.(A)
، تابع سینوس را بر روی تمام المانهای آرایهی A
اعمال میکند.
تقدم و شرکتپذیری عملگرها¶
جولیا شرکت پذیری و ترتیب عملگرها را به صورت زیر اعمال میکند. ترتیب جدول زیر از بیشترین تقدم به کمترین تقدم است:
دسته | عملگر | شرکتپذیری |
---|---|---|
نحو(سینتکس) | . به دنبال :: |
چپ |
توان | ^ |
راست |
یگانی | + - √ |
راست[^1] |
بیت شیفتها | << >> >>> |
چپ |
کسرها | // |
چپ |
ضرب | * / % & \ ÷ |
چپ[^2] |
جمع | + - \| ⊻ |
چپ[^2] |
نحو | : .. |
چپ |
نحو | \|> |
چپ |
نحو | <\| |
راست |
مقایسهها | > < >= <= == === != !== <: |
بدون شرکتپذیری |
کنترل روند | && followed by \|\| followed by ? |
راست |
جفت کردن | => |
راست |
تخصیصها | = += -= *= /= //= \= ^= ÷= %= \|= &= ⊻= <<= >>= >>>= |
راست |
[^1]:
عملگرهای یگانی +
و -
باید به وسیله پرانتز اطراف آرگومانشان مطرح شوند تا از بیمفهومی عملگر ++
و… دور شوند. ترکیبهای دیگر عملگرهای یگانی به وسیله شرکتپذیری راست جدا میشوند. برای مثال، a√√-
به این شکل ((a)√)√-
اعمال میشود.
[^2]:
عملگرهای +
، ++
و *
بدون شرکتپذیری هستند. a + b + c
به صورت (a,b,c)+
اعمال میشود و نه ((a,b)+,c)+
. با این حال، روشهای بازگشت برای (...a,b,c,d)+
و (...a,b,c,d)*
به صورت پیشفرض با شرکتپذیری چپ ارزیابی میشود.
برای اطلاع از تمامی تقدمات عملگرهای جولیا، ابتدای فایل src/julia-parser.scm
را ببینید. توجه کنید که برخی عملگرها ممکن است در ماژول Base
تعریف نشده باشند، اما در کتابخانههای استاندارد، پکیجها یا کد کاربر تعریف شده باشند.
شما همچنین می توانید تقدم به صورت عددی برای هر عملگر داده شده را از طریق تابع پیش ساخته Base.operator_precedence
پیدا کنید؛ اعداد بالاتر دارای تقدم بالاتری هستند:
julia> Base.operator_precedence(:+), Base.operator_precedence(:*), Base.operator_precedence(:.)
(11, 12, 17)
julia> Base.operator_precedence(:sin), Base.operator_precedence(:+=), Base.operator_precedence(:(=)) # (Note the necessary parens on `:(=)`)
(0, 1, 1)
نماد بیانکننده شرکتپذیری عملگر را نیز میتوانید به وسیله فراخوانی تابع پیش ساخته Base.operator_associativity
بیابید:
julia> Base.operator_associativity(:-), Base.operator_associativity(:+), Base.operator_associativity(:^)
(:left, :none, :right)
julia> Base.operator_associativity(:⊗), Base.operator_associativity(:sin), Base.operator_associativity(:→)
(:left, :none, :right)
دقت کنید که نمادهایی همچون sin:
تقدم 0
را برمیگردانند. این مقدار نشان میدهد که عملگرها بیاعتبار هستند و منظور از آن عملگرهای با کمترین میزان تقدم نیست. به همین ترتیب، برای چنین عملگرهایی شرکت پذیری آنها none:
اختصاص داده میشود.
[ضرایب لیترال عددی](@ref man-numeric-literal-coefficients)، مثلا 2x
، همانند عمل ضرب دارای بالاترین میزان تقدم نسبت به سایر عملگرهای باینری هستند، به استثنای عملگر ^
که به عنوان عمل به توانرسانی بالاترین تقدم را دارد.
julia> x = 3; 2x^2
18
julia> x = 3; 2^2x
64
قرار گرفتن در کنار هم مانند یک عملگر یگانی تجزیه می شود، که دارای همان عدم تقارن طبیعی در مجاورت توان است:-x^y
و2x^y
به ترتیب به صورت -(x^y)
و 2(x^y)
اعمال میشوند، در حالی که x^-y
و x^2y
به صورتx^(-y)
و x^(2y)
اعمال میشوند.
تبدیلهای عددی¶
زبان برنامه نویسی جولیا از تبدیلات عددی به سه شکل پشتیبانی میکند که تفاوت این شکلها در صحت دقت تبدیلهایشان است.
- نماد
T(x)
یاconvert(T,x)
، درواقعx
را به مقداری با نوعT
تبدیل میکند.- اگر
T
یک نوع ممیز شناور باشد، نتیجه نزدیکترین مقدار قابل ارائه است، که میتواند مثبت یا منفی بینهایت باشد. - اگر
T
یک نوع صحیح باشد، در صورتی کهx
به وسیلهT
قابل نماایش نباشد، یکInexactError
به وجود میآید .
- اگر
x % T
یک عدد صحیحx
را به یک مقدار با نوع صحیحT
تبدیل میکند، به صورتی که این مقدار برابر باx
به پیمانه2^n
است، که در آنn
تعداد بیتها درT
است. به عبارت دیگر، نمایش باینری کوتاه شده است تا سازگاری ایجاد شود.- تابع گرد کردن، میتواند یک نوع
T
را به صورت اختیاری به عنوان یک آرگومان بگیرد. مثلاً،round(Int,x)
کوتاه شدهی عبارتInt(round(x))
است.
مثال زیر تفاوت این شکلها را روشن میسازد:
julia> Int8(127)
127
julia> Int8(128)
ERROR: InexactError: trunc(Int8, 128)
Stacktrace:
[...]
julia> Int8(127.0)
127
julia> Int8(3.14)
ERROR: InexactError: Int8(3.14)
Stacktrace:
[...]
julia> Int8(128.0)
ERROR: InexactError: Int8(128.0)
Stacktrace:
[...]
julia> 127 % Int8
127
julia> 128 % Int8
-128
julia> round(Int8,127.4)
127
julia> round(Int8,127.6)
ERROR: InexactError: trunc(Int8, 128.0)
Stacktrace:
[...]
[نوشته تغییر و ترویج](@ref conversion-and-promotion) را برای چگونگی تعریف تغییرات و ترویجهای خود ببینید.
توابع گرد کننده¶
تابع | توضیحات | نوع بازگشتی |
---|---|---|
round(x) |
مقدار x را به نزدیکترین عدد صحیح گرد میکند |
typeof(x) |
round(T, x) |
مقدار x را به نزدیکترین عدد صحیح گرد میکند |
T |
floor(x) |
مقدار x را به سمت -Inf گرد میکند |
typeof(x) |
floor(T, x) |
مقدار x را به سمت -Inf گرد میکند |
T |
ceil(x) |
مقدار x را به سمت +Inf گرد میکند |
typeof(x) |
ceil(T, x) |
مقدار x را به سمت +Inf گرد میکند |
T |
trunc(x) |
مقدار x را به سمت صفر گرد میکند |
typeof(x) |
trunc(T, x) |
مقدار x را به سمت صفر گرد میکند |
T |
توابع تقسیم¶
تابع | توضیحات |
---|---|
div(x,y) , x÷y |
تقسیم truncated؛ خارج قسمت را به سمت 0 گرد میکند |
fld(x,y) |
تقسیم floored؛ خارج قسمت را به سمت Inf- گرد میکند |
cld(x,y) |
تقسیم ceiling؛ خارج قسمت را به سمت Inf+ گرد میکند |
rem(x,y) |
باقیمانده؛ در شرط x == div(x,y)*y + rem(x,y) صدق میکند; علامت آن با x یکسان است |
mod(x,y) |
حساب پیمانهای(modulus) ؛ در شرط x == fld(x,y)*y + mod(x,y) صدق میکند ; علامت آن با y یکسان است |
mod1(x,y) |
مقدار mod با وزن متعادل کننده 1؛ در صورتی که |
mod(r, y) == mod(x, y) باشد، [r∈(0,y را برای y>0 یا (r∈[y,0 را برای y<0 باز میگرداند. |
|
mod2pi(x) |
حساب به پیمانه 2pi(مانند تابع سینوس); 0 <= mod2pi(x) < 2pi |
divrem(x,y) |
مقدار (div(x,y),rem(x,y)) را بر میگرداند |
fldmod(x,y) |
مقدار (fld(x,y),mod(x,y)) را بر میگرداند |
gcd(x,y...) |
بزرگترین مقسومعلیه مشترک x , y , ... را بر میگرداند |
lcm(x,y...) |
کوچکترین مضرب مشترک x , y ,... را بر میگرداند |
توابع علامت و قدرمطلق¶
تابع | توضیحات |
---|---|
abs(x) |
یک مقدار مثبت با اندازهی x |
abs2(x) |
توان دوم اندازهی x |
sign(x) |
علامت x را نشان میدهد؛ 1+، 0 یا 1- را برمیگرداند |
signbit(x) |
نشان میدهد که آیا بیتِ علامت روشن(true) یا خاموش(false) است |
copysign(x,y) |
یک مقدار با اندازه x و با علامت y را برمیگرداند |
flipsign(x,y) |
یک مقدار با اندازه x و با علامت x*y را برمیگرداند |
توانها، لگاریتمها و ریشهها¶
تابع | توضیحات |
---|---|
sqrt(x) , √x |
ریشهی دوم x |
cbrt(x) , ∛x |
ریشهی سوم x |
hypot(x,y) |
وتر مثلث قائم الزاویهای را میدهد که اضلاع دیگر آن y و x هستند(اگر بیش از دو آرگومان به آن بدهید، ریشه دوم مجموع مربعات آرگومانها x_i^2∑√ را میدهد) |
exp(x) |
تابع e^x |
expm1(x) |
مقدار دقیق exp(x)-1 برای x نزدیک به صفر |
ldexp(x,n) |
مقدار x*2^n را برای n های صحیح محاسبه میکند |
log(x) |
لگاریتم طبیعی(بر مبنای عدد نپر) را برای x میدهد |
log(b,x) |
لگاریتم x بر مبنای b |
log2(x) |
لگاریتم x بر مبنای 2 |
log10(x) |
لگاریتم x بر مبنای 10 |
log1p(x) |
به دقت log(1+x) را برای x های نزدیک به صفر حساب میکند |
exponent(x) |
توان باینری x |
significand(x) |
مانتیس عدد ممیز شناور x |
برای اینکه بدانید توابعی مانند hypot
، expm1
و log1p
چرا ضروری هستند و به چه کاری میآیند، به لینکهای expm1, log1p, erfc, and hypot مراجعه کنید.
توابع مثلثاتی و هایپربولیک¶
تمامی توابع استاندارد مثلثاتی و هایپربولیک در جولیا تعریف شدهاند:
sin cos tan cot sec csc
sinh cosh tanh coth sech csch
asin acos atan acot asec acsc
asinh acosh atanh acoth asech acsch
sinc cosc
تمامی این توابع، تک آرگومانی هستند، که البته atan
میتواند دو آرگومان را متناظر با تابع
atan2
بپذیرد.
علاوه بر اینها، sinpi(x)
و cospi(x)
به ترتیب دقت بیشتری را برای محاسبه sin(pi*x)
و cos(pi*x)
فراهم میکنند.
به منظور محاسبه توابع مثلثاتی با درجه به جای رادیان، تابع را با پسوند d
بیان کنید. برای مثال sind(x)
سینوس x
را محاسبه میکند که x
برحسب درجه بیان شده است. لیست کامل توابع مثلثاتی با دریافت آرگومان درجهای را در زیر مشاهده میکنید:
sind cosd tand cotd secd cscd
asind acosd atand acotd asecd acscd
توابع خاص¶
بسیاری توابع خاص ریاضیاتی دیگر در پکیج SpecialFunctions.jl فراهم شدهاند.