ভাসমান পয়েন্ট এক্সওআর


15

আপনার কাজটি বেশ সহজ। দুটি ভাসা দেওয়া হয়েছে, বিটওয়াইসের সাথে তাদের বাইনারি উপস্থাপনা এবং একটি ফ্লোট হিসাবে আউটপুট।

উদাহরণ স্বরূপ,

Normal: 16.7472 ^ 123.61 = 7.13402e-37
Binary: 01000001100001011111101001000100 ^ 01000010111101110011100001010010 = 00000011011100101100001000010110

Normal: 2.2 ^ 4.4 = 1.17549e-38
Binary: 01000000000011001100110011001101 ^ 01000000100011001100110011001101 = 00000000100000000000000000000000

Normal: 7.898 ^ 3.4444 = 1.47705e-38
Binary: 01000000111111001011110001101010 ^ 01000000010111000110101001111111 = 00000000101000001101011000010101

বিধিনিষেধ / ব্যাখ্যা:


2
বুলিয়ান তালিকা কি কোনও সুবিধাজনক পদ্ধতি হিসাবে গণনা করছে?
অ্যাডম

23
একটি ভাসমান "বাইনারি প্রতিনিধিত্ব" অত্যন্ত অস্পষ্ট। আপনি কোন প্রতিনিধিত্বটি ব্যবহার করছেন তা আপনাকে নির্ধারণ করতে হবে। এই গ্রহে জীবন ইতিমধ্যে ব্যবহৃত সীমাবদ্ধ সংখ্যা সহ অনেকগুলি উপস্থাপনা রয়েছে, কিছু অন্যের চেয়ে বেশি জনপ্রিয়, যেমন আইইইই 754
বিপরীত প্রকৌশলী

7
এই প্রশ্নটি "উপস্থাপনাগুলিগুলির xor " না হয়ে "xor মানগুলি " হিসাবে আরও আকর্ষণীয় হবে । পরেরটি অবশ্যই কোনও ভাষাতে "xor two 32-bit পূর্ণসংখ্যার" অনুরূপ যেটির মধ্যে কোনও টাইপ সিস্টেমের অভাব রয়েছে বা টাইপ পেনিং স্বীকার করা হয়েছে, এবং এটি বেশ বিরক্তিকর ...
আর .. গিটিহাব স্টপ হেল্পিং আইসিসি

5
আমাদের কি ইনফিনিটি, আজ্ঞাবহ বা নেতিবাচক 0, ইনপুট বা আউটপুট হিসাবে পরিচালনা করতে হবে?
গ্রিমি

3
@ মার্ক: না, লিখিতভাবে প্রশ্নটি কেবল তাদের উপস্থাপনাগুলি যে পরিমাণে তা উপস্থাপন করুক না কেন or ফলটি ভাসমান পয়েন্ট ফর্ম্যাটের উপর নির্ভর করে তবে আলগোরিদিম সর্বদা উপস্থাপনের জন্য একক জোর নির্দেশ, যা বেশ বিরক্তিকর।
আর .. গীটহাব স্টপ হেল্পিং আইসিসি

উত্তর:


53

x86-64 মেশিন কোড, 4 বাইট

0f 57 c1 c3

সমাবেশে:

xorps xmm0, xmm1
ret

এটি একটি কলযোগ্য ফাংশন যা আর্গুমেন্ট হিসাবে দুটি ফ্লোট বা ডাবল লাগে xmm0 এবং xmm1) এবং একটি ফ্ল্যাট বা ডাবল (ইন xmm0) দেয়।

এটি উইন্ডোজ এক্স 64 এবং x86-64 সিসভি এবিআই উভয়ের কলিং কনভেনশনের সাথে মেলে এবং ফ্লোটের পাশাপাশি ডাবলসের জন্যও কাজ করে। (এগুলি এক্সএমএম রেজিস্টারে কম 4 বা 8 বাইটে পাস / ফিরিয়ে দেওয়া হয়েছে)।


12

সি ++ (জিসিসি) , 74 32 বাইট

#define f(x,y)*(int*)x^=*(int*)y

এটি অনলাইন চেষ্টা করুন!

আমি এর আগে সি ++ তে গল্ফ করিনি, সুতরাং যারা এই কোডটির আকার অর্ধেক করতে সহায়তা করেছিলেন তাদের সকলের জন্য আমি কৃতজ্ঞ! একটি ম্যাক্রো যা তার তর্ক হিসাবে দুটি ফ্লোটে পয়েন্টার নেয় এবং ফলাফলটি ফেরত দেওয়ার জন্য প্রথমটিকে সংশোধন করে।

2 বাইট সংরক্ষণ করার জন্য @ 12Me1 এবং 4 বাঁচানোর জন্য @ আরনল্ডকে ধন্যবাদ! আরও ১৪ জন বাঁচানোর জন্য @ নিশিয়োকাকে ধন্যবাদ, @ নীল আরও and এবং @ আজটেককো এবং নিশিওকে আরও ১১ জন বাঁচানোর জন্য! 5 পেট বাঁচানোর জন্য @ পিটারকর্ডসকে ধন্যবাদ!


1
আপনি 2 টি অক্ষর বাঁচাতে লাইন
ব্রেকগুলি

1
এর সাথে আরও 4 টি বাইট সংরক্ষণ করতে পারেন z=*(int*)x^*(int*)y;
আর্নল্ড

1
জিসিসি এক্সটেনশন সহ, 54 বাইট:#define f(x,y)({int z=*(int*)x^*(int*)y;*(float*)&z;})
নিশিয়োক

2
যেহেতু আপনি পয়েন্টার ব্যবহার করছেন, সুতরাং আউটপুট হিসাবে যে কোনও ইনপুট ব্যবহার করা বৈধ? যদি তাই হয়, আপনি লিখতে পারে (*(int*)x^=*(int*)y)
নিল

1
@ নীলের পরামর্শটি বিবেচনায় নিয়ে এটি 48 বাইটে উঠবে:#define f(x,y)({*(int*)x^=*(int*)y;*(float*)x;})
নিশিওকা

9

এআরএম থাম্ব মেশিন কোড, 6 4 বাইট

48 40 70 47

সমাবেশে:

ইওআরএস আর 0, আর 1; এক্সক্লুসিভ বা প্রথম দুটি প্যারামের মধ্যে, স্টোরের ফলাফল রিটার্ন রেজিস্টার হয়
বিএক্স এলআর; লিঙ্ক রেজিস্টারে সঞ্চিত মানটিতে শাখা (ফেরত ঠিকানা)

স্ট্যান্ডার্ড আর্ম কলিং কনভেনশনের অধীনে, প্রথম দুটি প্যারামিটারগুলি রেজিস্টার আর0 এবং আর 1 এ পাস করা হয়, ফলাফলগুলি আর -0 এ ফিরে আসে এবং এলআর রিটার্নের ঠিকানা রাখে। ধরে নিই যে আপনি 32 বিট ফ্লোট সহ নরম ফ্লোট এবিআই ব্যবহার করছেন, এটি 4 বাইটে পছন্দসই অপারেশনটি সম্পাদন করবে।

-2 বাইটস কডি গ্রেকে ধন্যবাদ


2
এর EORS r0, r1পরিবর্তে 2 বাইট সংরক্ষণ করার জন্য কী ব্যবহার করা সম্ভব ? এটি আপনার 2 বাইটের 48 40তুলনায় কেবলমাত্র 2-বাইট নির্দেশ ( ) EOR। আপনি ইতিমধ্যে থাম্বকে লক্ষ্য করছেন, সুতরাং যতদূর আমি দেখতে পাচ্ছি এটি ঠিকঠাক কাজ করবে। পার্থক্যটি হ'ল এটি স্থিতি পতাকাগুলি আপডেট করে তবে আপনি এই ক্ষেত্রে সেই পার্শ্ব প্রতিক্রিয়াটির বিষয়ে চিন্তা করেন না।
কোডি গ্রে

2
আপনার অবশ্যই উল্লেখ করা উচিত যে এটি নরম-ফ্লোট এবিআই ব্যবহার করছে যা ভিএফপি / নিওন s0এবং নয়, পূর্ণসংখ্যার রেজিস্টারগুলিতে এফপি অর্গগুলি পাস করে s1
পিটার কর্ডস

6

পাইথন 3 + নম্পি, 75 59 বাইট

lambda x,y:(x.view("i")^y.view("i")).view("f")
import numpy

এটি অনলাইন চেষ্টা করুন!

একটি ল্যাম্বডা সংজ্ঞায়িত করে যা দুটি আঙুলের ফ্লোট 32 অ্যারেটিকে তার আর্গুমেন্ট হিসাবে গ্রহণ করে এবং একটি নপি ফ্লোট 32 অ্যারে প্রদান করে।

14 শে বাইট সংরক্ষণের জন্য @ শ্যাডোএ্যাঙ্গারকে ধন্যবাদ, এবং জোয়েল আরও 2!

যদি আমদানিটি বাদ দেওয়া যায় (যেহেতু আমার ল্যাম্বদা নিজেই কোনও বেস নিম্পিক ফাংশনগুলির চেয়ে নকল বস্তুগুলিতে পদ্ধতিগুলি কল করে), আমি আরও 13 বাইট সংরক্ষণ করতে পারি। কোড গল্ফ স্ট্যান্ডার্ড বিধি থেকে আমি এ বিষয়ে অনিশ্চিত।


এটি জেলি এবং রুবির উত্তরের চেয়ে ছোট। নিস!
এরিক ডুমিনিল

সম্পূর্ণভাবে আমদানি সরিয়ে আপনি 27 বাইট (এটিকে 48 বাইটে নামিয়ে) শেভ করতে পারেন (কেবল কলারটি আপনি numpy.float32পেরিয়েছেন যাতে আপনি তাদের পদ্ধতিগুলি ব্যবহার করতে পারেন) এবং উভয় int32ব্যবহারের সাথে 'i'এবং float32ব্যবহারের পরিবর্তে 'f'; dtypeপরামিতি একটি স্ট্রিং যা বাস্তব রূপান্তরিত পরার হতে পারে dtypeআপনার জন্য, এবং সুবিধামত, 'i'এবং 'f'সেই dtypes, যা আমদানি করতে ফাংশন জন্য প্রয়োজন সরিয়ে ফেলা করতে আইনগত উপায় আছে numpyসব তার নামস্থান মধ্যে স্টাফ। আমদানি অপসারণের জন্য এটি কোড গল্ফ আইনী কিনা তা নিশ্চিত নয় তবে তবুও numpyইনপুট গ্রহণ করে ...
শ্যাডোর্যাঞ্জার


আমি ভেবেছিলাম আমদানিগুলি অন্তর্ভুক্ত করতে হবে, তবে আমি নিশ্চিত নই। টিপস টিপ টাইপের জন্য ধন্যবাদ!
নিক কেনেডি

@NickKennedy: হ্যাঁ, যদি আমদানি প্রয়োজন বোধ করা হয়, এটা মাত্র 8 বাইট (থেকে দুই প্রতিটি সংরক্ষণ int32করতে 'i', চার থেকে float32থেকে 'f'), কিন্তু এখনও কিছু আছে। যদি আমদানিটি কঠোরভাবে প্রয়োজন হয় তবে আপনি import numpyএটি from numpy import*থেকে নাম বের করে না নিয়ে প্যাকেজটির উপস্থিতি প্রমাণ করার জন্য এটি পরিবর্তন করতে পারেন । এটি আপনাকে আরও ছয়টি বাইট, মোট 61 বাইটে নামবে।
শ্যাডোর্যাঞ্জার

6

জেলি + নম্পি, 89 77 বাইট

“(F(“I^F(“IvF).item()”;"F“¢lẒṾ:/²)Ɓɱ¡vẠ⁷5Rʠ¡7ɼṆṪ{ė4¶Gẉn`¡Ð}ṫȥṄo{b»Ḳ¤¹ṣḢ}jʋƒŒV

এটি অনলাইন চেষ্টা করুন!

পাইথন 3 কোডটি এটি পুনরুত্পাদন করার চেয়ে লম্বা হওয়ার সন্দেহজনক সম্মান পেয়েছে, মূলত নাম্পি অবজেক্টে / থেকে রূপান্তর করার প্রয়োজনের কারণে এবং জালির দ্বারা আর্দ্রতা বোঝানো হয় নি তাই __import__() বিল্ট- ব্যবহার করতে হবে।

একটি মোনাডিক লিঙ্ক দুইটি ফ্লোটকে তার যুক্তি হিসাবে তালিকা হিসাবে গ্রহণ করে এবং একটি ভাসা ফেরত দেয়।

নিম্নলিখিত পাইথন 3 কোড মূল্যায়ন:

(__import__('numpy').float32(x).view("i")^__import__('numpy').float32(y).view("i")).view(__import__('numpy').float32).item()

কোথায় xএবং yইনপুট দ্বারা প্রতিস্থাপিত হয়।


5

এপিএল (ডায়ালগ ইউনিকোড) , 14 বাইট এসবিসিএস

পুরো প্রোগ্রাম। স্টিডিন থেকে দুটি আইইইই 754 64-বিট ভাসমান-পয়েন্ট সংখ্যা (বাইনারি 64) এর 1-কলাম ম্যাট্রিক্সের জন্য প্রম্পট দেয়। Stdout এ জাতীয় একটি সংখ্যা মুদ্রণ।

645DR≠⌿11DR

এটি অনলাইন চেষ্টা করুন!

 প্রম্পট (নন-ফ্লোটে ধসে পড়ে এমন নম্বরগুলি ফাংশন সহ জোর করে ভেসে উঠতে পারে ⊃⊢⎕DR⍨645,⍨⎕DR)

11⎕DR 1-বিট বাইনারি (1) ডি আটা আর ইপ্রিজেটেশন (2-সারি, 64-কলাম ম্যাট্রিক্স) এ রূপান্তর করুন

≠⌿ উল্লম্ব XOR হ্রাস

645⎕DR -৪-বিট ফ্লোটে রূপান্তর করুন (৫) ডি আটা আর ইপ্রিজেন্টেশন (একক সংখ্যা)


4

ভ্যাক্স বেসিক (পরে ভিএমএস বেসিক, তারপরে কমপ্যাক বেসিক) , 11 বাইট

H = F XOR G

আমার কাছে কিছুটা নির্বোধ মনে হচ্ছে, স্পষ্টতই, পুরানো ভাষাগুলি আরও ভাল করবে কারণ তারা দৃ strong়-টাইপিংয়ের বিষয়ে এতটা চিন্তা করে না।


1
সাইটে স্বাগতম এবং প্রথম প্রথম উত্তর! বহিরাগত শিরোনাম বলে মনে হচ্ছে যা আমি সম্পাদনা করেছি, তবে সাথে যুক্ত কোনও তথ্য সহ এটিকে আবার সম্পাদনা করতে নির্দ্বিধায় না হলে
সেয়ার কইনারিংহাহিং

3

অক্টাভা , 59 বাইট

@(a,b)(t=@typecast)(bitxor(t(a,u='int32'),t(b,u)),'single')

এটি অনলাইন চেষ্টা করুন!

টাইপকাস্ট অন্তর্নিহিত বিটগুলি পরিবর্তন না করে castালাইয়ের MATLAB / অক্টোব উপায় Oct এটি প্রয়োজনীয় কারণ bitxorশুধুমাত্র পূর্ণসংখ্যার উপর কাজ করে। আপনি কখনই AssumedTypeতৃতীয় যুক্তি হিসাবে স্পষ্টভাবে নির্দিষ্ট করতে পারেন তা সত্ত্বেও তারা কেন ভাসমান পয়েন্ট সংখ্যা বাস্তবায়িত করল না bitxor। আমার মনে হয় একমাত্র ব্যবহার বিনোদনমূলক প্রোগ্রামিং।


এফপি বিট প্যাটার্নগুলিতে বিটওয়াইস স্টাফগুলি সাইন বিট দিয়ে কাজগুলি করার জন্য, বা খুব কমই কোনও exp()প্রয়োগের অংশ হিসাবে এক্সপোজন ক্ষেত্রের মধ্যে একটি পূর্ণসংখ্যার স্টাফ করার জন্য সমাবেশ ভাষায় কার্যকর। তবে আমি ধরে নিই যে অক্টেভের ইতিমধ্যে কপিসাইন এবং অবহেলার জন্য ফাংশন / অপারেটর রয়েছে। এবং তারা AND (যেমন একটি ধ্রুবক মুখোশ সহ) ব্যবহারের পরে মাইক্রো-অপ্টিমাইজেশানগুলির বিষয়ে চিন্তা করে না তবে XOR শর্তাধীনভাবে অন্যটির চিহ্নের উপর ভিত্তি করে একটি মানের চিহ্নটি উল্টাতে পারে। Asm এ একটি বাস্তব অপ্টিমাইজেশন প্রকল্পে (আসলে AVX অন্তর্নিহিত সি) আমি শূন্যের বিপরীতে সিএমপি এড়াতে সাইন বিটটি দেখে স্লো বিটের দিকে তাকিয়ে ফ্লোটের এক্সওআর ব্যবহার করেছি।
পিটার কর্ডেস

2

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 92 বাইট

x=>BitConverter.Int32BitsToSingle(x.Aggregate(0,(a,b)=>a^BitConverter.SingleToInt32Bits(b)))

এটি অনলাইন চেষ্টা করুন!


1
আপনি এটির জন্য অনিরাপদ কোডটি ব্যবহার করতে পারেন , যদিও আমি নিশ্চিত না যে "অনিরাপদ" কীওয়ার্ডটি বাইকোয়েন্টে প্রভাব ফেলবে কিনা।
নেতিবাচক সাত



2

সি, 23 বাইট

f(int*x,int*y){*x^=*y;}

এটি অনলাইন চেষ্টা করুন!

এটি কিছুটা শিফটি হতে পারে; এটি পয়েন্টারকে floats তে পয়েন্টার হিসাবে নেয় int

তবে এটি কাজ করে (এটি সর্বোপরি সি)।

এটি ভেরিয়েবলের পয়েন্টার নিয়ে এবং এটি জায়গায় রেখে সংশোধন করে গ্রহণযোগ্য ইনপুটটির সুবিধা নেয়। কোনও (ব্যবহারযোগ্য) মান ফেরত দেওয়া হয় না।


2

জাভাস্ক্রিপ্ট (নোড.জেএস) ,  105  101 বাইট

সংক্ষিপ্ত নোড সংস্করণটি @ নীল
সেভ করেছেন আরও 4 টি বাইট @ শিরুআসাকোটোর জন্য ধন্যবাদ

হিসাবে ইনপুট লাগে (x)(y)

x=>y=>(v=Buffer(4),v.writeInt32LE((g=n=>v.writeFloatLE(n)&&v.readInt32LE())(x)^g(y)),v.readFloatLE())

এটি অনলাইন চেষ্টা করুন!


জাভাস্ক্রিপ্ট (ES6), 115 বাইট

2 টি ফ্লোটের অ্যারে হিসাবে ইনপুট নেয়।

a=>(v=new DataView(new ArrayBuffer(4))).getFloat32(v.setUint32([x,y]=a.map(n=>v.getUint32(v.setFloat32(0,n))),x^y))

এটি অনলাইন চেষ্টা করুন!


অবগতির জন্য নোড এর Bufferকয়েক বাইট সংরক্ষণ: a=>(v=new Buffer(4),[x,y]=a.map(n=>v.writeFloatLE(n)&&v.readInt32LE()),v.writeInt32LE(x^y),v.readFloatLE())
নীল

@ নীল ধন্যবাদ! (পরিবর্তে একটি ফাংশন ব্যবহার করে 2 আরও বেশি বাইট সংরক্ষিত map)
Arnauld

1
ড্রপ newমধ্যে new Buffer(4)এছাড়াও iirc কাজ করা উচিত
Shieru Asakoto

1

ওল্ফ্রাম ম্যাথেমেটিকা , 50 বাইট

BitXor@@(FromDigits[RealDigits[#,2,32,0][[1]],2]&)

যদিও আমি দৃ strongly়ভাবে সন্দেহ করি যে এটি আরও গল্ফ হতে পারে, তবে কার্যত দুটি অতিরিক্ত যুক্তি RealDigitsসঠিক ফলাফল পাওয়ার জন্য প্রয়োজনীয় বলে মনে হচ্ছে।

এটি অনলাইন চেষ্টা করুন!


1

লুয়া , 73 বাইট

a,b=('II'):unpack(('ff'):pack(...))print((('f'):unpack(('I'):pack(a~b))))

এটি অনলাইন চেষ্টা করুন!

এই কোডটি 4-বাইটের স্বাক্ষরবিহীন পূর্ণসংখ্যা এবং ভাসমান যা কনফিগারেশন চলছে তা ধরে নিয়েছে tio.run। আর্গুমেন্ট হিসাবে ইনপুট সহ পুরো প্রোগ্রাম হিসাবে চালান।


1

রুবি , 78 67 বাইট

-11 বাইটস @ গ্রায়েটিকে ধন্যবাদ।

->x{[x.pack("gg").unpack("NN").inject(&:^)].pack(?N).unpack(?g)[0]}

এটি অনলাইন চেষ্টা করুন!

ইনপুট দুটি ফ্লোটের অ্যারে।


x.map{|v|[v].pack(?g).unpack(?N)[0]}x.pack("gg").unpack("NN")
user1686

@ গ্রায়েটি: অসাধারণ, আপনাকে অনেক ধন্যবাদ! কোডটি পাইথনের তুলনায় এখনও লম্বা। : - /
এরিক ডুমিনিল

1

জাভা (জেডিকে) , 109 76 বাইট

(a,b)->Float.intBitsToFloat(Float.floatToIntBits(a)^Float.floatToIntBits(b))

এটি অনলাইন চেষ্টা করুন!

আমি জাভাতে গল্ফ করেছিলাম এবং আমি বাইট গণনার অংশ হিসাবে এলএইচএসের ঘোষণাপত্রের প্রয়োজন কিনা তা আমি নিশ্চিত নই? এটি যদি ডাবলবাইনারি অপারেটর ব্যবহার করে তবে এলএইচএস আরও কম হবে, তবে আরএইচএসকে Double.doubleToLongBits এবং Double.longBitsToDouble ব্যবহার করতে হবে, সুতরাং এটি আসলে দীর্ঘ।

বাইট গণনায় যথেষ্ট সঞ্চয় করার জন্য নীলকে ধন্যবাদ!


1
আইআইআরসি আপনার এমনকি বাইট গণনার অংশ হিসাবে অ্যাসাইনমেন্টের দরকার নেই, কেবল কোনও টেস্ট স্যুটের অংশ হিসাবে আপনি নিজের অনলাইনে চেষ্টা করে অন্তর্ভুক্ত করতে পারেন! হেডার।
নিল

@ নীল আপনাকে ধন্যবাদ! এটি একটি বড় পার্থক্য!
ডেভিড কনরাড

0

পরিষ্কার , 36 বাইট

f::!Real!Real->Real
f _ _=code{xor%}

এটি অনলাইন চেষ্টা করুন!

ধন্যবাদ 64৪ -বিট প্ল্যাটফর্মগুলিতে Realএবং Intধরণের একই মাপের ...
দুর্ভাগ্যক্রমে একটি সম্পূর্ণ স্বাক্ষর প্রয়োজন অন্যথায় গ্রাফটি প্রিটজেল এবং সবকিছুতে সিগফল্টে রূপান্তরিত হয়।

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