Rational numbers هي كسور بسطها عدد صحيح وقاسمها عدد صحيح.
على سبيل المثال، يمكننا تخزين 2//3 ككسر دقيق بدلًا من قيمة Float64 التقريبية 0.6666...
الميزة هي أنه (باستثناء الحالة القصوى لتجاوز سعة الأعداد الصحيحة) سيبقى العدد النسبي دقيقًا، مما يجنّب أخطاء التقريب التي كثيرًا ما تكون حتمية مع أعداد الفاصلة العائمة.
الأعداد النسبية نوع عددي بسيط للغاية، وهي مصممة لتعمل كما تتوقع تمامًا. ولأنها نوع قياسي في Julia منذ الإصدارات الأولى، فإن معظم الدوال تقبلها كمدخلات بالطريقة نفسها التي تقبل بها الأعداد الصحيحة وأعداد الفاصلة العائمة.
الإنشاء بسيط كل البساطة: استخدم // بين عددين صحيحين.
julia> 3//4
3//4
julia> a = 3; b = 4;
julia> a//b
3//4
تُحذف العوامل المشتركة تلقائيًا، فيُختصر الكسر إلى "أبسط صورة": أصغر الأعداد الصحيحة التي تمثّل الكسر بدقة، وبمقام غير سالب.
julia> 5//15
1//3
julia> 5//-15
-1//3
يمكنك استخدام arithmetic operators المعتادة + - * / ^ % مع الأعداد النسبية، كما تستخدمها مع الأنواع العددية الأخرى تمامًا.
يمكن تضمين الأعداد الصحيحة وأنواع Rational أخرى، فيكون الناتج Rational.
أما تضمين float في التعبير فيعطي ناتجًا من نوع float، مع ما يترتب على ذلك من فقدان محتمل للدقة.
إذا أردت float، فما عليك سوى استخدام الدالة float() لتحويل العدد النسبي.
ومن الطبيعي تمامًا أن تستخدم الأعداد النسبية للحفاظ على الدقة خلال عملية حسابية طويلة، ثم تحوّل الناتج إلى عدد الفاصلة العائمة في النهاية.
julia> 3//4 + 1//3 # addition
13//12
julia> 3//4 * 1//3 # multiplication
1//4
julia> 3//4 / 1//3 # division
9//4
julia> 3//4 ^ 2 # exponentiation
3//16
julia> 3//4 + 5 # rational and int => rational
23//4
julia> 3//4 + 5.3 # rational and float => float
6.05
julia> float(3//4) # casting
0.75
في Julia، الأعداد النسبية مجرد أعداد. وعادةً ما يحوّل المصرّف الأنواع حسب الحاجة.
لكن انتبه: المقارنات تنجح مع الكسور ذات التمثيل العشري المنتهي:
julia> 3//4 == 0.75
true
julia> 3//4 < 0.74
false
أما في غير ذلك، فينبغي تحويل Rational إلى Float قبل المقارنات:
julia> 1//3 == 1/3
false
julia> float(1//3) == 1/3
true
تقبل الدوال الرياضية الأعداد النسبية كمدخلات، لكنها قد تعطي ناتجًا من أعداد الفاصلة العائمة:
julia> sqrt(9//16)
0.75
لاحظت إحدى المؤسسات البحثية أن بعض باحثيها المبتدئين يستخدمون أساليب أقل من مثالية في تحليلاتهم. أحد هذه الأساليب هو تحويل الاحتمالات المتقطعة فورًا إلى أعداد عشرية (أي أعداد حقيقية) قبل إجراء المزيد من الحسابات.
يفضّل الباحثون الكبار استخدام الأعداد النسبية في الحسابات، إذ قد توفّر دقة أعلى، ويرغبون في معرفة ما إذا كانت الممارسات السيئة للباحثين المبتدئين قد أثّرت على نتائج الدراسات.
أُجري نوعان من الدراسات:
يطلب منك الباحثون الكبار أن تكتب دوال يمكنها مساعدتهم في تحديد ما إذا كانت هناك أخطاء تقريب في التحليلات ناتجة عن استخدام الأعداد العشرية، وأن توفّر عددًا نسبيًا دقيقًا للنتيجة إذا وُجدت أخطاء.
تأخذ الدالة rationalize(successes, trials) مصفوفتين، هما successes وtrials.
بالنسبة للفهرس i، يقابل successes[i] عدد النجاحات التي حدثت في trials[i] من المحاولات.
تُرجع الدالة مصفوفة من الأعداد النسبية للنجاحات مقسومة على عدد المحاولات، بالترتيب نفسه الذي في المصفوفات المُدخلة.
julia> rationalize([1, 2, 3], [4, 5, 6])
3-element Vector{Rational{Int64}}:
1//4
2//5
1//2
وبالمثل، تأخذ الدالة probabilities(successes, trials) مصفوفتين، هما successes وtrials.
تُرجع مصفوفة من الأعداد العشرية للنجاحات مقسومة على عدد المحاولات، بالترتيب نفسه الذي في المصفوفات المُدخلة.
julia> probabilities([1, 2, 3], [4, 5, 6])
3-element Vector{Float64}:
0.25
0.4
0.5
تأخذ الدالة checkmean(successes, trials) المصفوفتين successes وtrials.
تقارن متوسط الاحتمالات الحقيقية بمتوسط الاحتمالات النسبية.
checkmean القيمة true
checkmean الاحتمال النسبي.julia> successes, trials = [9, 4, 7, 8, 6], [22, 22, 11, 17, 12];
julia> checkmean(successes, trials)
true
julia> successes, trials = [6, 5, 9, 8, 9], [21, 19, 13, 25, 22];
julia> checkmean(successes, trials)
1873629//4754750
تأخذ الدالة checkprob(successes, trials) المصفوفتين successes وtrials.
تقارن الاحتمال الكلي للاحتمالات العشرية بالاحتمال الكلي للاحتمالات النسبية.
checkprob القيمة true
checkprob الاحتمال النسبي.julia> successes, trials = [2, 9, 4, 4, 5], [15, 11, 17, 19, 15];
julia> checkprob(successes, trials)
true
julia> successes, trials = [9, 8, 5, 4, 3], [22, 14, 19, 25, 18];
julia> checkprob(sucesses, trials)
12//7315
سجّل في Exercism لتتعلّم وتتقن Julia عبر 35 مفهومًا128 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.