Elixir 1.7

Float




elixir

Float

फ़्लोटिंग-पॉइंट नंबरों के साथ काम करने के लिए फ़ंक्शंस।

कर्नेल कार्य

Kernel मॉड्यूल पर फ़्लोटिंग-पॉइंट नंबरों से संबंधित फ़ंक्शन भी हैं। यहाँ उनकी एक सूची है:

  • Kernel.round/1 : किसी संख्या को निकटतम पूर्णांक तक गोल करता है।
  • Kernel.trunc/1 : किसी संख्या का पूर्णांक भाग लौटाता है।

ज्ञात पहलु

फ्लोटिंग-पॉइंट नंबरों और अंकगणित के साथ कुछ बहुत अच्छी तरह से ज्ञात समस्याएं हैं, इस तथ्य के कारण अधिकांश दशमलव अंशों को फ्लोटिंग-पॉइंट बाइनरी द्वारा प्रतिनिधित्व नहीं किया जा सकता है और अधिकांश ऑपरेशन सटीक नहीं हैं, लेकिन सन्निकटन पर काम करते हैं। वे मुद्दे अमृत के लिए विशिष्ट नहीं हैं, वे फ्लोटिंग पॉइंट प्रतिनिधित्व का एक गुण हैं।

उदाहरण के लिए, संख्या ०.१ और ०.०१ उनमें से दो हैं, इसका अर्थ क्या है कि ०.१ का परिणाम ०.० नहीं देता है और न ही निकटतम अभ्यावेदन। यहाँ इस मामले में क्या होता है:

  • ०.१ का निकटतम अभ्यावेदन संख्या ०.१०००००००१० है
  • 0.01 के निकटतम निकटतम अभ्यावेदन संख्या 0.0099999997 है
  • 0.1 * 0.1 करना 0.01 पर लौटना चाहिए, लेकिन क्योंकि 0.1 वास्तव में 0.1000000014 है, परिणाम 0.010000000000000002 है, और क्योंकि यह 0.01 तक निकटतम प्रतिनिधित्व योग्य संख्या नहीं है, इसलिए आपको इस ऑपरेशन के लिए गलत परिणाम मिलेगा

फ़्लोरिंग या राउंडिंग नंबर जैसी अन्य ज्ञात समस्याएं भी हैं। उनके बारे में अधिक जानकारी के लिए round/2 और floor/2 देखें।

अस्थायी-बिंदु अंकगणितीय यात्रा के बारे में अधिक जानने के लिए:

सारांश

प्रकार

precision_range()

कार्य

छत (संख्या, सटीक \\ 0)

num से अधिक या उसके बराबर सबसे छोटे पूर्णांक के लिए एक फ्लोट को num

floor/2

संख्या के बराबर या उससे कम की सबसे बड़ी संख्या पर एक फ्लोट को num

parse(binary)

एक बाइनरी को एक फ्लोट में पार करता है

ratio(float)

पूर्णांकों की एक जोड़ी देता है जिसका अनुपात मूल फ्लोट के समान और एक सकारात्मक भाजक के बराबर होता है

round/2

भिन्न अंकों की एक अनियंत्रित संख्या (0 से 15 के बीच) के लिए एक फ्लोटिंग-पॉइंट वैल्यू को राउंड करता है

to_charlist(float)

एक चारलिस्ट देता है जो दिए गए फ्लोट के टेक्स्ट प्रतिनिधित्व से मेल खाती है

to_string(float)

एक बाइनरी लौटाता है जो दिए गए फ्लोट के टेक्स्ट प्रतिनिधित्व से मेल खाती है

प्रकार

precision_range ()

precision_range() :: 0..15

कार्य

छत (संख्या, सटीक \\ 0)

ceil(float(), precision_range()) :: float()

num से अधिक या उसके बराबर सबसे छोटे पूर्णांक के लिए एक फ्लोट को num

ceil/2 भी ceil/2 अंकों (0 और 15 के बीच) की एक अनियंत्रित संख्या के लिए एक फ्लोटिंग-पॉइंट मूल्य को गोल करने के लिए एक सटीक स्वीकार करता है।

दशमलव के रूपांतरण के बिना ऑपरेशन बाइनरी फ्लोटिंग पॉइंट पर किया जाता है।

झांकियों के लिए ceil/2 का व्यवहार आश्चर्यजनक हो सकता है। उदाहरण के लिए:

iex> Float.ceil(-12.52, 2)
-12.51

किसी ने इसे -12.52 से शुरू करने की उम्मीद की होगी। यह एक बग नहीं है। अधिकांश दशमलव अंशों को एक बाइनरी फ़्लोटिंग पॉइंट के रूप में प्रस्तुत नहीं किया जा सकता है और इसलिए उपरोक्त संख्या को आंतरिक रूप से -12.51999999 के रूप में दर्शाया जाता है, जो ऊपर दिए गए व्यवहार की व्याख्या करता है।

यह फ़ंक्शन हमेशा फ़्लोट लौटाता है। परिणाम को बाद में पूर्णांक करने के लिए Kernel.trunc/1 का उपयोग किया जा सकता है।

उदाहरण

iex> Float.ceil(34.25)
35.0
iex> Float.ceil(-56.5)
-56.0
iex> Float.ceil(34.251, 2)
34.26

मंजिल (संख्या, सटीक \\ 0)

floor(float(), precision_range()) :: float()

संख्या के बराबर या उससे कम की सबसे बड़ी संख्या पर एक फ्लोट को num

floor/2 भी एक अस्थायी मान को गोल अंशों के एक मनमाना अंक (0 और 15 के बीच) के नीचे एक दौर को स्वीकार करता है। दशमलव के रूपांतरण के बिना ऑपरेशन बाइनरी फ्लोटिंग पॉइंट पर किया जाता है।

यह फ़ंक्शन हमेशा एक फ्लोट देता है। परिणाम को बाद में पूर्णांक करने के लिए Kernel.trunc/1 का उपयोग किया जा सकता है।

ज्ञात पहलु

फ्लोट्स के लिए floor/2 का व्यवहार आश्चर्यजनक हो सकता है। उदाहरण के लिए:

iex> Float.floor(12.52, 2)
12.51

किसी ने इसे 12.52 तक फर्श पर ले जाने की उम्मीद की होगी। यह एक बग नहीं है। अधिकांश दशमलव अंशों को एक बाइनरी फ़्लोटिंग पॉइंट के रूप में प्रस्तुत नहीं किया जा सकता है और इसलिए ऊपर की संख्या को आंतरिक रूप से 12.51999999 के रूप में दर्शाया गया है, जो ऊपर दिए गए व्यवहार की व्याख्या करता है।

उदाहरण

iex> Float.floor(34.25)
34.0
iex> Float.floor(-56.5)
-57.0
iex> Float.floor(34.259, 2)
34.25

पार्स (बाइनरी)

parse(binary()) :: {float(), binary()} | :error

एक बाइनरी को एक फ्लोट में पार्स करता है।

यदि सफल हुआ, तो {float, remainder_of_binary} के रूप में एक टपल लौटाता है; जब बाइनरी को एक वैध फ्लोट में ज़ब्त नहीं किया जा सकता है, तो परमाणु :error वापस आ जाती है।

यदि फ्लोट का आकार अधिकतम आकार 1.7976931348623157e+308 , तो ArgumentError अपवाद उठाया जाता है।

यदि आप एक स्ट्रिंग-स्वरूपित फ्लोट को सीधे फ्लोट में बदलना चाहते हैं, तो इसके बजाय String.to_float/1 का उपयोग किया जा सकता है।

उदाहरण

iex> Float.parse("34")
{34.0, ""}
iex> Float.parse("34.25")
{34.25, ""}
iex> Float.parse("56.5xyz")
{56.5, "xyz"}

iex> Float.parse("pi")
:error

अनुपात (फ्लोट) (1.4.0 के बाद से)

ratio(float()) :: {pos_integer() | neg_integer(), pos_integer()}

पूर्णांकों की एक जोड़ी देता है जिसका अनुपात मूल फ्लोट के समान और एक सकारात्मक भाजक के बराबर होता है।

उदाहरण

iex> Float.ratio(3.14)
{7070651414971679, 2251799813685248}
iex> Float.ratio(-3.14)
{-7070651414971679, 2251799813685248}
iex> Float.ratio(1.5)
{3, 2}
iex> Float.ratio(-1.5)
{-3, 2}
iex> Float.ratio(16.0)
{16, 1}
iex> Float.ratio(-16.0)
{-16, 1}

गोल (फ्लोट, सटीक \\ 0)

round(float(), precision_range()) :: float()

भिन्न अंकों की एक अनियंत्रित संख्या (0 से 15 के बीच) में एक अस्थायी-बिंदु मान को राउंड करता है।

गोलाई दिशा हमेशा आधे तक बाँधती है। दशमलव के रूपांतरण के बिना ऑपरेशन बाइनरी फ्लोटिंग पॉइंट पर किया जाता है।

यह फ़ंक्शन केवल फ़्लोट्स को स्वीकार करता है और हमेशा एक फ़्लोट लौटाता है। यदि आप एक ऐसा फ़ंक्शन चाहते हैं जो Kernel.round/1 उपयोग करें, जो फ्लोट और पूर्णांक दोनों को स्वीकार करता है और हमेशा एक पूर्णांक देता है।

ज्ञात पहलु

झांकियों के लिए round/2 का व्यवहार आश्चर्यजनक हो सकता है। उदाहरण के लिए:

iex> Float.round(5.5675, 3)
5.567

किसी ने उम्मीद की होगी कि वह 5.568 तक गोल हो जाएगा। यह एक बग नहीं है। अधिकांश दशमलव अंशों को एक बाइनरी फ़्लोटिंग पॉइंट के रूप में प्रस्तुत नहीं किया जा सकता है और इसलिए ऊपर की संख्या आंतरिक रूप से 5.567499999 के रूप में प्रस्तुत की जाती है, जो ऊपर दिए गए व्यवहार की व्याख्या करती है। यदि आप दशमलव के लिए सटीक गोलाई चाहते हैं, तो आपको एक दशमलव पुस्तकालय का उपयोग करना चाहिए। उपरोक्त व्यवहार भी डेविड एम। गे के द्वारा संदर्भ कार्यान्वयन के अनुसार किया गया है, जैसे कि "सही ढंग से बाइनरी-दशमलव और दशमलव-बाइनरी रूपांतरण"।

उदाहरण

iex> Float.round(12.5)
13.0
iex> Float.round(5.5674, 3)
5.567
iex> Float.round(5.5675, 3)
5.567
iex> Float.round(-5.5674, 3)
-5.567
iex> Float.round(-5.5675)
-6.0
iex> Float.round(12.341444444444441, 15)
12.341444444444441

to_charlist (नाव)

to_charlist(float()) :: charlist()

एक चारलिस्ट देता है जो दिए गए फ्लोट के टेक्स्ट प्रतिनिधित्व से मेल खाती है।

यह प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर SIGPLAN '96 सम्मेलन की कार्यवाही में "मुद्रण फ़्लोटिंग-पॉइंट नंबर त्वरित और सटीक रूप से मुद्रण" में वर्णित एल्गोरिदम के अनुसार सबसे कम प्रतिनिधित्व का उपयोग करता है।

उदाहरण

iex> Float.to_charlist(7.0)
'7.0'

to_string (नाव)

to_string(float()) :: String.t()

एक बाइनरी लौटाता है जो दिए गए फ्लोट के टेक्स्ट प्रतिनिधित्व से मेल खाती है।

यह प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर SIGPLAN '96 सम्मेलन की कार्यवाही में "मुद्रण फ़्लोटिंग-पॉइंट नंबर त्वरित और सटीक रूप से मुद्रण" में वर्णित एल्गोरिदम के अनुसार सबसे कम प्रतिनिधित्व का उपयोग करता है।

उदाहरण

iex> Float.to_string(7.0)
"7.0"