অনুগ্রহ করে কোন শাখা নেই


14

নিম্ন স্তরের কোড অপ্টিমাইজেশনে মাঝারিভাবে থাকা যে কেউ শাখা প্রশাখার বিপদ সম্পর্কে জানেন, এটি যেমন-বিবৃতি, লুপ বা সিলেক্ট-স্টেটমেন্টগুলি যেমন কোনও শাখার ভুল-অনুমানের সম্ভাবনা থাকে তখন তা ভয়ানক ঘড়ির অপচয় হবার জিনিস।

সরল সমস্যাগুলি সরল পাটিগণিতের সাথে আরও ভাল সমাধান করা যায়, তাই আসুন এটি করা যাক।

নিম্নলিখিত সমস্যার জন্য সমস্ত ভেরিয়েবল 32 বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যা এবং কেবলমাত্র অনুমোদিত কোডটি নিম্নোক্ত অপারেটরগুলির সাথে জড়িত সরল সেট স্টেটমেন্টগুলি রয়েছে:

+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left

Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal

Set operator
=

প্রতিটি লাইনে অবশ্যই একটি ভেরিয়েবল আইডেন্টিফায়ার সমন্বিত সেট অপারেটর এবং তার পরে এক্সপ্রেশন থাকা উচিত।

একটি এক্সপ্রেশন অতিরিক্ত সেট অপারেটর নাও থাকতে পারে তবে এতে ভেরিয়েবল শনাক্তকারী, আক্ষরিক সংখ্যা এবং প্রথম বন্ধনী থাকতে পারে।

গল্ফিং স্কোর কেবল অপারেটরের সংখ্যা গণনা করবে।

উদাহরণ:

myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3

অপারেটর স্কোর আছে 5।

কোনও সমাধানে লেখক যতটা ফিট দেখতে পান ততগুলি ভেরিয়েবল অন্তর্ভুক্ত করতে পারে।
যে ভেরিয়েবলগুলি সেট করা হয়নি সেগুলির মান রয়েছে 0
ওভারফ্লো এবং underflow অনুমতি দেওয়া হয়, সমস্ত ঋণাত্মক সংখ্যা underflow, তাই 3 - 5হয় 4294967294এমনকি একটি বড় বিবৃতি অংশ হিসেবে।

কার্য 1: সর্বাধিক

দুটি মান, Aএবং B, সুযোগে বিদ্যমান, RESULTযখন প্রোগ্রামটি শেষ হয় তখন ভেরিয়েবলটি সেই মানগুলির মধ্যে সবচেয়ে বেশি থাকে।

টাস্ক 2: মিডিয়ান

তিন মূল্যবোধ, A, Bএবং C, সুযোগ বিদ্যমান, করতে RESULTপরিবর্তনশীল যারা মান যখন প্রোগ্রাম বন্ধ মধ্যমা ধারণ করে।

কার্য 3: বর্গমূল

একটি মান, Aসুযোগের মধ্যে উপস্থিত RESULTরয়েছে A, প্রোগ্রামটি শেষ হয়ে গেলে ভেরিয়েবলের বর্গমূলকে বৃত্তাকার নীচে করে তোলে ।

কেবলমাত্র একটি বা দুটি প্রশ্নের উত্তর পোস্ট করা ঠিক আছে, আপনারা কারও কাছে বৈধ সমাধান খুঁজে পাওয়া চ্যালেঞ্জ হবে।


ইউনারি অপারেটররা কোথায়? আমি কিছু যত্ন নিই না -তবে ~সুন্দর হতে পারতাম (আমি কী জন্য জানি না)।
জন ডিভোরাক

অবশ্যই, 0xFFFF_FFFF_FFFF_FFFF ^ xএবং 0 - x। আমি কীভাবে ভুলে যেতে পারি?
জন ডিভোরাক

@JanDvorak এটা সবচেয়ে কম বিবরণ তৈরি সম্পূর্ণতার যুক্তিবিজ্ঞান জন্য নয় !বেশ তুচ্ছ হল: x == 0
aaaaaaaaaaaa

শূন্য দ্বারা বিভাগের আচরণ কী?
জন ডিভোরাক

গণিতে (এ> খ) সত্য বা মিথ্যা ফেরত দেয় returns বুলে মিথ্যাটিকে 0 এবং সত্য থেকে 1 তে রূপান্তর করে use এটি কি আইনী Boole[a-b]?
ডেভিডসি

উত্তর:


5

কার্য 3, 23 অপশাসন

x = (A >> 16) + A / ((A >> 13) + 511) + 15
x = (x + A/x) >> 1
x = (x + A/x) >> 1
x = (x + A/x) >> 1
RESULT = x - (x > A/x)

অন্যান্য সমাধানগুলির মতো নিউটনের পদ্ধতিটি ব্যবহার করে আরও দক্ষতার সাথে বেছে নেওয়া বীজ। প্রথম বিটটি A >> 16রেঞ্জের শীর্ষকে সুখী A / ((A >> 13) + 511)রাখে , দ্বিতীয় বিটটি রেঞ্জের মাঝখানের অংশটিকে সুখী রাখে এবং শেষ বিটটি 15নীচে রাখে এবং শূন্য ত্রুটি দ্বারা বিভাজনকে বাধা দেয় (15 বৃহত্তম মান এটি সম্ভব যা 0সঠিকভাবে রূপান্তর করতে দেয় - অর্ধেক তিনবার বিয়োগ সংশোধন শূন্যের সমান)। ইনপুট মানগুলির 225, 275625, 82137969, 2908768489(এবং নিকটবর্তী মানগুলির) জন্য প্রাথমিক বীজ হুবহু। পরিসরের সমস্ত প্রান্তের কেসগুলি (নিখুঁত স্কোয়ারগুলি, নিখুঁত স্কোয়ারগুলি +1 এবং নিখুঁত স্কোয়ারগুলি - 1) 0 .. 2**32-1পরীক্ষা করা হয়েছে এবং সঠিক।

নিয়ম সম্পর্কে কয়েকটি মন্তব্য:
ওভারফ্লো এবং আন্ডারফ্লো অনুমোদিত, সমস্ত নেতিবাচক সংখ্যা আন্ডারফ্লো, সুতরাং 3 - 5 হল 4294967294, এমনকি বৃহত্তর বক্তব্যের অংশ হিসাবে

এই শেষ বিট একটি উদ্ভাবনী ঘাতকের কিছু হতে দেখা গেছে। আমি প্রথমে হ্যালি পদ্ধতির সাধারণীকরণ ফর্মটি ব্যবহার করে একটি সমাধানের চেষ্টা করেছি , তবে বুঝতে পেরেছিলাম যে উপরের সীমাবদ্ধতার কারণে এটি অবৈধ। পুনরাবৃত্তি (বর্গমূল হিসাবে প্রয়োগ করা হয়):

x = x * (3*A + x*x) / (A + 3*x*x)

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

নিউটনের পদ্ধতিতেও সমস্যা রয়েছে (কমপক্ষে পূর্ণসংখ্যার সাথে আচরণ করার সময়) এটি প্রায়শই এমন একটি এক্সে পৌঁছায় যে A / x - x = 2 - এক্ষেত্রে, এটি যথাযথ সংখ্যার মূলের চেয়ে বড় মানের রূপান্তরিত হবে, যার জন্য সংশোধন করা দরকার; হ্যালির পদ্ধতিতে এ জাতীয় কোনও সংশোধন দরকার নেই। তবে দুর্ভাগ্যক্রমে, 3*A + x*xঅনুমোদিত 32-বিট পূর্ণসংখ্যার জায়গার চেয়ে প্রায়শই বড় হবে larger

অন্যান্য বেশ কয়েকটি জেনারালাইজড এন রুট অ্যালগরিদম রয়েছে তবে তারা সকলেই একই বৈশিষ্ট্যটি ভাগ করে:

x = x + x*(v - x**n)/(v*n)
x = (x*(n+1) - x**(n+1)/v)/n
x = ((n-2)*x + (4*v*x)/(v + x**n))/n
x = x*((n+2)*v + (n-2)*x**n)/(v + x**n)/n
x = ((n-2)*x + (n*x*v)/(v + (n-1)*x**n))/(n-1)
x = ((n-2)*x + x*((n*2-1)*v + x**n)/(v + (n*2-1)*x**n))/(n-1)

x = x + 2*x*(v - x**n)/(v + x**n)/n
x = x + x*31*(v - x**n)/(10*v + 21*x**n)/n
x = x + x*561*(v - x**n)/(181*v + 380*x**n)/n
x = x + x*1153*(v - x**n)/(372*v + 781*x**n)/n

ইত্যাদির বেশিরভাগই হয় ঘনক বা চতুষ্কোণ রূপান্তর। শেষ চারটি পুনরাবৃত্তির সিরিজের অংশ যা কোয়ার্টিক কনভার্জেন্সে রূপান্তরিত করে। তবে প্র্যাক্সিসে, নিউটনের পদ্ধতি আপনাকে কম সংখ্যক ক্রিয়াকলাপের সাহায্যে যা পাবে তা পাবে, যদি না আপনার কয়েক শ অঙ্কের গণনা করার প্রয়োজন হয়।


খুব সুন্দর, তবে 4294967295 এর জন্য ব্যর্থ। বিধি হিসাবে, তারা এটি আকর্ষণীয় করে তুলতে কঠোর হতে হবে। সঠিক বিতরণটি কোনটি সর্বোত্তম চ্যালেঞ্জ তৈরি করে তা আপনি তর্ক করতে পারেন তবে শেষ পর্যন্ত এটি নিয়মগুলি যেটি ঠিক তা মঞ্জুর করে তার চেয়ে স্পষ্ট এবং দ্ব্যর্থহীন হওয়া আরও অনেক গুরুত্বপূর্ণ।
aaaaaaaaaaaa

আমি মনে করি না হ্যালি যেভাবেই এর মূল্যবান হতে পারত, খুব দূর থেকে ধারণা করা যায় যে এটি 3 এর ফ্যাক্টরের তুলনায় কিছুটা কম উন্নত হবে, নিউটন 2 এর ফ্যাক্টরের চেয়ে কিছুটা কম করবে একইভাবে একটি ভাল অনুমান থেকে হ্যালি ট্রিপল হবে যথার্থতা, নিউটন এটি দ্বিগুণ করবে। সুতরাং একটি হ্যালি পুনরাবৃত্তির মূল্য হ'ল log(3)/log(2) ~= 1.585নিউটন পুনরাবৃত্তি।
আআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআ

@eBusiness আমার প্রথমদিকে 2 টি হ্যালির একই ধরণের নির্বাচিত বীজ ছিল 25 টি অপস - ত্রুটি সহ যখন A = 0- সুতরাং এটি আসলে সংক্ষিপ্ত। প্রায় 4294967295 , এটি ছিল একটি তদারকি: 65536² ≡ 0 হিসাবে , সংশোধন পুনরাবৃত্তিটি সংশোধন করতে ব্যর্থ। আমি বিকল্প খুঁজে পেতে পারি কিনা তা আমি দেখতে পাব।
primo

@e ব্যবসায় স্থির
প্রিমো

প্যাকের স্নিগ্ধ স্কোয়ার রুট, দুর্দান্ত কাজ এবং অফিসিয়াল বিজয় ব্যাজ।
aaaaaaaaaaaa

5

65 (61) ক্রিয়াকলাপ (5 + 13 + 47 (43))

কার্য 1 - সর্বাধিক (ক, খ)

RESULT = A + (B - A) * (A <= B)

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

কার্য 2 - মিড (এ, বি, সি)

RESULT = A                               \
       + (B - A) * (A > B) ^ (B <= C)    \
       + (C - A) * (A > C) ^ (C <  B)

এটি আমার পূর্ববর্তী 15-অপশন সমাধানের চেয়ে উন্নতি, যা তিনটি ভেরিয়েবলকে শর্তযুক্ত করেছিল - এটি দুটি বিয়োগফলকে সংরক্ষণ করেছিল, তবে এটি আরও একটি কেন্দ্রীকরণ পরীক্ষা চালু করেছিল। পরীক্ষাটি নিজেই সহজ: যদি দুজনের মধ্যে একটিরও উপরে থাকে তবে একটি উপাদান মাঝখানে থাকে।

কার্য 3 - স্কয়ার্ট (এ)

X1     = 1024 + A / 2048
X2     = (X1  + A / X1 ) / 2
...
X10    = (X9 + A / X9 ) / 2
RESULT = X16 - (X16 * X16 > A)

নিউটনের প্রায় এগারো রাউন্ড। 1024 এর ম্যাজিক ধ্রুবকটি ইতিমধ্যে ওল্ফ্রামডাব্লু দ্বারা পরাজিত হয়েছে (এবং 512 = 1 * 2 =* 32 রূপান্তরের আগে শূন্য দ্বারা বিভাজন ঘটায়) তবে আমরা যদি 0/0 শূন্য হিসাবে সংজ্ঞায়িত করতে পারি তবে দশটি পুনরাবৃত্তি শুরু মান সহ কাজ করবে 512. আমি স্বীকার করি যে দশটি পুনরাবৃত্তির দাবি আমার সম্পূর্ণরূপে পরিষ্কার নয়, তবে আমি এখনও তাদেরকে প্রথম বন্ধনী হিসাবে দাবি করি। তবে, নয়টি সম্ভব কিনা আমাকে তদন্ত করতে হবে।WolframH এর সমাধান হয় নয়টি পুনরাবৃত্তিও।


আমি মনে করি টাস্ক 3 এর প্রথম লাইনটি সঠিক নয়: দ্বিতীয় ধ্রুবকটি প্রথম ধ্রুবকের 4 গুণ হওয়া উচিত ("খাঁটি" নিউটনের জন্য)।
মনিকা পুনরায়

@ ওল্ফ্রামহহ আরও ভাল প্রাথমিক অনুমান হতে পারে আমি কেন চক্র নষ্ট করছি। 4 * নিয়ে কোথায় এসেছেন? এটি দেখে মনে হচ্ছে দুটি পুনরাবৃত্তি একটিতে ঘূর্ণিত।
জন ডিভোরাক

(1024 + A/1024)/2 == (512 + A/2048)(যা এর মত X0 = 1024এবং তারপরে নিউটন)
মনিকা পুনরায় ইনস্টল করুন

টাস্কের দুর্দান্ত সমাধান ১। কলম্বাসের ডিম।
ডেভিডসি

@ ডেভিডক্যারাহার অবশ্যই, সঠিক সমাধানটি হবে MOV RESULT, A; CMP A,B; CMOVA RESULT, B;-)
জন ডিভোরাক

5

1: 5 অপারেটর

RESULT = B ^ (A ^ B)*(A > B)

2: 13 অপারেটর

RESULT = B ^ (A ^ B)*(A > B) ^ (A ^ C)*(A > C) ^ (B ^ C)*(B > C)

3: 27 অপারেটর

g = 47|((0x00ffffff & A)>>10)|(A>>14)
r = (g + A/g)/3
r = (r + A/r)>>1
r = (r + A/r)>>1
r = (r + A/r)>>1
RESULT = r - (r*r-1>=A)

5

কার্য 3, 39 অপারেশন

সম্পাদনা: সর্বশেষ লাইন পরিবর্তন হয়েছে; মন্তব্য দেখুন।

এটি নিউথন পদ্ধতির একটি বাস্তবায়ন। সমস্ত ধনাত্মক স্কোয়ার, এবং ধনাত্মক স্কোয়ার বিয়োগ একটি, এবং 0 থেকে 2 ^ 32-1 অবধি এক মিলিয়ন এলোমেলো সংখ্যার সাথেও পরীক্ষিত। আপাতদৃষ্টিতে মজার শুরু মানের জন্য ছোট (1022 + A/1022) / 2যা পুনরাবৃত্তিও অন্তত নম্বর (আমি মনে করি) প্রয়োজন, এবং তোলে RESULTজন্য A=0ডান (যা কেনার ক্ষেত্রে দেখা হবে না 1024পরিবর্তে 1022)।

r = (511 + A/2044)
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
r = (r + A/r) / 2
RESULT = r - (r > A/r)

আমি কি নিউটনের পদ্ধতিটির আমার নিকৃষ্ট অনুলিপিটি রাখি যা আপনার সাথে সমান্তরালে অনুকূলিত হয়েছিল এবং পরে বেশ ভাল সময় পোস্ট করেছিল? দুর্দান্ত মন একসাথে ভাবেন এবং সমাধান দুটি দুটি উত্তরকে বিভক্ত করা খারাপ, তবে আপনি এখনই উত্তরটি উত্তর না হিসাবে বর্তমান সময়ের অবস্থা is
জন ডিভোরাক

@ জানডভোরাক: জিজ্ঞাসা করার জন্য ধন্যবাদ আপনি যদি আমার উত্তরে আমার সামান্য ছোট পদ্ধতিটি রাখেন তবে ঠিক আছে। এছাড়াও, আমাকে কৃতিত্ব দেওয়ার জন্য ধন্যবাদ :-)
মনিকা

সত্যিই চমৎকার চেষ্টা করি, কিন্তু ইনপুট 4294965360 ব্যর্থ 4294967295. মাধ্যমে
aaaaaaaaaaaa

@ ই বিজনেস: এই ইনপুটগুলির জন্য আপনি কী ফলাফল পাবেন? আমি আমার পরীক্ষায় 65535 পেয়েছি, যা ঠিক আছে।
মনিকা পুনরায় ইনস্টল করুন

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