फ्लोटिंग के बिना, इसके अलावा फ्लोटिंग पॉइंट!


9

आपका कार्य किसी भी भाषा में प्रोग्राम लिखना है, जिसमें किसी भी अंश या फ्लोटिंग पॉइंट मैथ्स का उपयोग किए बिना दो फ्लोटिंग पॉइंट नंबर एक साथ जुड़ते हैं। पूर्णांक गणित की अनुमति है।

स्वरूप

संख्याओं के लिए प्रारूप 1 और 0 वाले तार हैं जो IEEE 754 32-बिट फ्लोट के द्विआधारी मान का प्रतिनिधित्व करते हैं । उदाहरण के लिए संख्या 2.54 को "010000000010001010001111101011100" स्ट्रिंग द्वारा दर्शाया जाएगा।

लक्ष्य

आप प्रोग्राम को उपर्युक्त प्रारूप में दो नंबरों का इनपुट करें, उन्हें एक साथ जोड़ें, और परिणाम को उसी प्रारूप में आउटपुट करें। किसी भी भाषा में सबसे कम जवाब जीतता है!

नियम

बिल्कुल कोई फ़्लोटिंग पॉइंट, दशमलव या किसी भी प्रकार के गैर-पूर्णांक गणित कार्यों की अनुमति नहीं है।

आप मान सकते हैं कि इनपुट साफ है (अर्थात इसमें केवल 1 और 0 शामिल हैं)।

आप मान सकते हैं कि इनपुट नंबर हैं, न कि Inf, -Inf, या NaN या सबनॉर्मल। हालाँकि, यदि परिणाम अधिकतम मान से अधिक है या न्यूनतम मान से छोटा है, तो आपको क्रमशः Inf और -Inf वापस करना चाहिए। एक सबनॉर्मल (असामान्य) परिणाम को 0 पर फ्लश किया जा सकता है।

आपको ठीक से गोलाई संभालने की जरूरत नहीं है। चिंता मत करो अगर आपके परिणाम कुछ बिट बाहर हैं।

टेस्ट

अपने कार्यक्रमों का परीक्षण करने के लिए, आप इस टूल का उपयोग करके दशमलव और फ्लोटिंग पॉइंट बाइनरी नंबरों के बीच कनवर्ट कर सकते हैं ।

1000 + 0.5 = 1000.5

01000100011110100000000000000000 + 00111111000000000000000000000000 = 01000100011110100010000000000000

float.MaxValue + float.MaxValue = Infinity

01111111011111111111111111111111 + 01111111011111111111111111111111 = 01111111100000000000000000000000

321.123 + -123.321 = 197.802

01000011101000001000111110111110 + 11000010111101101010010001011010= 01000011010001011100110101010000

सौभाग्य!

जवाबों:


3

पायथन, 224 वर्ण

यह कोड एक फ्लोटिंग पॉइंट इनपुट fको पूर्णांक में परिवर्तित f*2^150करता है, इसके अलावा अजगर मूल बड़े पूर्णांक का उपयोग करता है, फिर वापस परिवर्तित होता है।

V=lambda x:((-1)**int(x[0])<<int(x[1:9],2))*int('1'+x[9:],2)
B=lambda x,n:B(x/2,n-1)+'01'[x&1]if n else''
def A(x,y):
 v=V(x)+V(y)
 s=e=0
 if v<0:s=1;v=-v
 while v>=1<<24:v/=2;e+=1
 if e>254:v=0
 return'%d'%s+B(e,8)+B(v,23)

3

जे (172 अक्षर)

चूंकि IEEE 754 पाँच राउंडिंग नियमों की अनुमति देता है, इसलिए मैंने "0 की ओर" नियम चुना। यहाँ मेरा कोड है:

b=:(_1&^)@".@{.*[:#.1x,("."0)@(9&}.),#.@:("."0)@}.@(9&{.)$0:
a=:b@[([:,(<&0)":"0@:,,@((8$2)&#:)@(-&24)@$@#:,}.@(24&{.)@#:@|)@(]`(**2x^278"_)@.((>&((2x^278)-2x^254))@|))@+b@]

बहुत ही उदाहरण आप देते हैं (लेकिन बिल्कुल अलग नियम के कारण समान परिणाम नहीं):

   '01000100011110100000000000000000' a '00111111000000000000000000000000'
01000100011110100010000000000000
   '01111111011111111111111111111111' a '01111111011111111111111111111111'
01111111100000000000000000000000
   '01000011101000001000111110111110' a '11000010111101101010010001011010'
01000011010001011100110101001111
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.