ভাসমান বিন্দু সংযোজন, ভাসা ছাড়াই!


9

আপনার কাজটি হ'ল কোনও প্রোগ্রামে কোনও ভাষা লিখুন যা কোনও ভগ্নাংশ বা ভাসমান পয়েন্ট গণিত ব্যবহার না করে দুটি ভাসমান পয়েন্ট সংখ্যা একসাথে যুক্ত করে । পূর্ণসংখ্যার গণিত অনুমোদিত।

বিন্যাস

সংখ্যার বিন্যাসে স্ট্রিংগুলি 1 এবং 0 এর রয়েছে যা কোনও আইইইই 754 32-বিট ফ্লোটের বাইনারি মান উপস্থাপন করে । উদাহরণস্বরূপ 2.54 নম্বরটি "01000000001000101000111101011100" স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হবে।

লক্ষ্য

আপনার প্রোগ্রামটির উপরে উল্লিখিত বিন্যাসে দুটি সংখ্যা ইনপুট করা উচিত, তাদের একসাথে যুক্ত করা উচিত এবং ফলাফলটি একই ফর্ম্যাটে ফলাফল দেওয়া উচিত। যে কোনও ভাষার সবচেয়ে সংক্ষিপ্ত উত্তরটি জিতবে!

বিধি

নিরঙ্কুশভাবে কোনও ভাসমান বিন্দু, দশমিক, বা কোনও ধরণের অ-পূর্ণসংখ্যার গণিতের ক্রিয়াকলাপ অনুমোদিত নয়।

আপনি ধরে নিতে পারেন যে ইনপুটটি পরিষ্কার (যেমন কেবলমাত্র 1 এবং 0 এর রয়েছে)।

আপনি ধরে নিতে পারেন যে ইনপুটগুলি সংখ্যা, এবং ইনফ, -আইএনএফ, বা এনএএন বা আর্মনর্মাল নয়। তবে, ফলাফলটি যদি সর্বোচ্চ মানের চেয়ে বড় হয় বা ন্যূনতম মানের চেয়ে ছোট হয় তবে আপনার যথাক্রমে ইনফ এবং -আইএনএফ ফিরে আসা উচিত। একটি অসাধারণ (নরমাল) ফলাফল 0 এ ফ্লাশ করা যেতে পারে।

আপনার রাউন্ডিং সঠিকভাবে পরিচালনা করতে হবে না। আপনার ফলাফল কয়েক বিট আউট হলে চিন্তা করবেন না।

টেস্ট

আপনার প্রোগ্রামগুলি পরীক্ষা করতে, আপনি এই সরঞ্জামটি ব্যবহার করে দশমিক এবং ভাসমান পয়েন্ট বাইনারি সংখ্যার মধ্যে রূপান্তর করতে পারেন ।

1000 + 0.5 = 1000.5

01000100011110100000000000000000 + 00111111000000000000000000000000 = 01000100011110100010000000000000

float.MaxValue + float.MaxValue = অসীমতা

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 টি অক্ষর)

যেহেতু আইইইই 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.