दाने

दाने

आसान

परिचय

एक समय की बात है, एक बुद्धिमान नौकर ने एक राजकुमार की जान बचाई। राजा ने वादा किया कि नौकर जो भी माँगेगा, वह उसे देगा। राजा को शतरंज बहुत पसंद था। यह जानकर नौकर ने राजा से कहा कि उसे गेहूँ के दाने चाहिए। शतरंज के बोर्ड के पहले खाने पर एक दाना, और हर अगले खाने पर दानों की संख्या दोगुनी।

निर्देश

शतरंज के बोर्ड पर गेहूँ के दानों की संख्या निकालिए।

शतरंज के बोर्ड में 64 खाने होते हैं। खाना 1 पर एक दाना होता है, खाना 2 पर दो दाने, खाना 3 पर चार दाने, और इसी तरह हर बार संख्या दोगुनी होती जाती है।

ऐसा कोड लिखिए जो यह निकालता है:

  • किसी दिए गए खाने पर गेहूँ के दानों की संख्या
  • शतरंज के बोर्ड पर गेहूँ के दानों की कुल संख्या

GNU awk और मनमानी परिशुद्धता का अंकगणित

डिफॉल्ट रूप से awk में संख्याएँ डबल-प्रिसिज़न फ्लोटिंग पॉइंट संख्याओं के रूप में रखी जाती हैं। इससे 53 बिट की परिशुद्धता मिलती है (मैनुअल में तालिका 16.3 देखिए)। दुर्भाग्य से, यह इस अभ्यास को पूरा करने के लिए अपर्याप्त है (स्पॉइलर अलर्ट: एक टेस्ट के लिए 63 बिट की परिशुद्धता चाहिए)।

"अपर्याप्त परिशुद्धता" ऐसी दिखती है:

$ gawk 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
not enough precision

अगर संबंधित लाइब्रेरीज़ awk एक्ज़ीक्यूटेबल में कंपाइल कर दी गई हों, तो GNU awk मनमानी परिशुद्धता वाली संख्याएँ इस्तेमाल कर सकता है। अपने awk का वर्ज़न जाँचिए और देखिए कि "GNU MPFR" मौजूद है या नहीं:

$ gawk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
...

अगर यह मौजूद है, तो -M ऑप्शन इस्तेमाल करके इस सुविधा को चालू कीजिए:

$ gawk -M 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
OK

अगर मेरे awk में -M नहीं है, तो क्या करें? तब आपको कोई बाहरी प्रोग्राम कॉल करना पड़ेगा जो मनमानी परिशुद्धता का अंकगणित कर सके, जैसे bc. यह कैसे करें, इसका एक उदाहरण किसी पाइप से getline को वेरिएबल में लेने वाले हिस्से में देखिए।

आगे पढ़ने के लिए: मनमानी परिशुद्धता का अंकगणित

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
AWK Exercism

दाने शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और AWK को 3 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।