परिमेय संख्या को दो पूर्णांकों a और b के भागफल के रूप में परिभाषित किया जाता है, जिन्हें क्रमशः अंश और हर कहा जाता है, और जहाँ b != 0 होता है।
ध्यान दीजिए कि गणित की दृष्टि से हर शून्य नहीं हो सकता। लेकिन परिमेय संख्याओं के कई कार्यान्वयनों में आप पाएँगे कि हर को शून्य होने दिया जाता है, और उसका व्यवहार फ्लोटिंग पॉइंट संख्याओं में धन या ऋण अनंत जैसा होता है। ऐसे मामलों में भी अंश और हर सामान्यतः एक साथ शून्य नहीं हो सकते।
परिमेय संख्या r = a/b का निरपेक्ष मान |r|, |a|/|b| के बराबर होता है।
दो परिमेय संख्याओं r₁ = a₁/b₁ और r₂ = a₂/b₂ का योग r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂) होता है।
दो परिमेय संख्याओं r₁ = a₁/b₁ और r₂ = a₂/b₂ का अंतर r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂) होता है।
दो परिमेय संख्याओं r₁ = a₁/b₁ और r₂ = a₂/b₂ का गुणनफल (गुणा) r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂) होता है।
यदि a₂ शून्य न हो, तो परिमेय संख्या r₁ = a₁/b₁ को दूसरी परिमेय संख्या r₂ = a₂/b₂ से भाग देने पर r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) मिलता है।
परिमेय संख्या r = a/b को ऋणेतर पूर्णांक घात n तक बढ़ाने पर r^n = (a^n)/(b^n) प्राप्त होता है।
परिमेय संख्या r = a/b को ऋणात्मक पूर्णांक घात n तक बढ़ाने पर r^n = (b^m)/(a^m) प्राप्त होता है, जहाँ m = |n| है।
परिमेय संख्या r = a/b को वास्तविक (फ्लोटिंग पॉइंट) संख्या x तक बढ़ाने पर भागफल (a^x)/(b^x) प्राप्त होता है, जो एक वास्तविक संख्या है।
वास्तविक संख्या x को परिमेय संख्या r = a/b तक बढ़ाने पर x^(a/b) = root(x^a, b) प्राप्त होता है, जहाँ root(p, q) का अर्थ p का qवाँ मूल है।
निम्नलिखित ऑपरेशन कार्यान्वित कीजिए:
आपके कार्यान्वयन में परिमेय संख्याएँ हमेशा न्यूनतम रूप में ही रहनी चाहिए।
उदाहरण के लिए, 4/4 को न्यूनतम रूप में लाने पर 1/1 मिलना चाहिए, 30/60 को 1/2 मिलना चाहिए, 12/8 को 3/2 मिलना चाहिए, इत्यादि।
परिमेय संख्या r = a/b को न्यूनतम रूप में लाने के लिए a और b को उनके महत्तम समापवर्तक (gcd) से भाग दीजिए।
तो, उदाहरण के लिए, gcd(12, 8) = 4, इसलिए r = 12/8 को न्यूनतम रूप में लाकर (12/4)/(8/4) = 3/2 किया जा सकता है।
परिमेय संख्या का न्यूनतम रूप "मानक रूप" में होना चाहिए (हर हमेशा एक धनात्मक पूर्णांक होना चाहिए)।
यदि हर ऋणात्मक पूर्णांक हो, तो अंश और हर दोनों को -1 से गुणा कीजिए, ताकि मानक रूप प्राप्त हो जाए।
उदाहरण के लिए, 3/-4 को न्यूनतम रूप में लाकर -3/4 किया जाना चाहिए।
मान लीजिए कि जिस प्रोग्रामिंग भाषा का आप उपयोग कर रहे हैं, उसमें परिमेय संख्याओं का कोई कार्यान्वयन नहीं है।
परिमेय संख्याओं को किसी वास्तविक संख्या की घात तक उठाने के लिए उस संख्या को गैर-पूर्णांक घात तक बढ़ाना पड़ता है। ऐसी सुविधा WebAssembly में मूल रूप से उपलब्ध नहीं है।
लेकिन आप x ^ y को x ^ y = exp(y * ln(x)) के रूप में भी लिख सकते हैं।
और सौभाग्य से, एक्सपोनेंशियल तथा प्राकृतिक लघुगणक निकालने के लिए अलग-अलग श्रेणियों का उपयोग किया जा सकता है।
एक्सपोनेंशियल के लिए सबसे अच्छा तरीका एक टेलर श्रेणी है:
exp(x) ≃ 1 + x + x ^ 2 / 2! + x ^ 3 / 3! + x ^ 4 / 4! + ... + x ^ n / n!
प्राकृतिक लघुगणक को कुशलता से निकालने के कई तरीके हैं। इनमें से एक इनवर्स हाइपरबोलिक टैंगेंट पर आधारित श्रेणी है:
ln(x) / 2 ≃ y + y ^ 3 / 3 + y ^ 5 / 5 + ... + y ^ n / n where y = (x - 1) / (x + 1)
प्राकृतिक लघुगणक निकालने की एक और टेलर श्रेणी भी है:
ln(x) = (x - 1) - (x - 1) ^ 2 / 2 + (x - 1) ^ 3 / 3 - (x - 1) ^ 4 / 4 ... + (x - 1) ^ n / n
यह केवल 0 और 2 के बीच के x के लिए ही सटीक होती है। लेकिन हम ln(x) = - ln(1 / x) का उपयोग भी कर सकते हैं।
पूर्णांक घात के लिए गुणा का उपयोग करना बेहतर है, और उसके साथ लूप या रिकर्शन भी, ताकि प्रदर्शन और परिशुद्धता दोनों बनी रहें। और भी बेहतर प्रदर्शन के लिए हॉर्नर का तरीका अपनाकर गुणाओं की संख्या घटाई जा सकती है।
Exercism पर साइन अप कीजिए और WebAssembly को 87 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।