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 + - * / ^ % परिमेय संख्याओं के साथ काम करते हैं, लगभग उसी तरह जैसे अन्य संख्या टाइप के साथ।
पूर्णांक और दूसरी Rationals भी इसमें शामिल की जा सकती हैं, और परिणाम एक 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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।