ভাসমান-পয়েন্টে দুটি সংখ্যার গড়ের শক্ত গণনা?


15

চলুন x, yদুটি ভাসমান-পয়েন্ট সংখ্যা হবে। তাদের গড় গণনা করার সঠিক উপায় কী?

সাদাসিধা ভাবে (x+y)/2উপচে ফলে যখন করতে xএবং yখুবই বড়। আমি 0.5 * x + 0.5 * yসম্ভবত আরও ভাল মনে করি, তবে এতে দুটি গুণ রয়েছে (যা সম্ভবত অদক্ষ) এবং এটি যথেষ্ট ভাল কিনা তা আমি নিশ্চিত নই। একটি ভাল উপায় আছে কি?

আরেকটি ধারণা নিয়ে আমি খেলছি (y/2)(1 + x/y)যদি তা হয় x<=y। তবে আবারও, আমি কীভাবে এটি বিশ্লেষণ করব এবং প্রমাণ করব যে এটি আমার প্রয়োজনীয়তা পূরণ করে।

তদুপরি, আমার একটি গ্যারান্টি দরকার যে গণিত গড় হবে >= min(x,y)এবং <= max(x,y)ডন হ্যাচের উত্তরে যেমন উল্লেখ করা হয়েছে , এই প্রশ্নটি উত্থাপন করার আরও ভাল উপায় হ'ল: দুটি সংখ্যার গড়ের বাস্তবায়ন কী যা সর্বদা সম্ভব সঠিক ফলাফল দেয়? এটি হ'ল xএবং yযদি ভাসমান-পয়েন্ট সংখ্যা হয় তবে কীভাবে নিকটস্থ ভাসমান-পয়েন্ট সংখ্যাটি গণনা করবেন (x+y)/2? এই ক্ষেত্রে, গণিত গড়টি স্বয়ংক্রিয়ভাবে >= min(x,y)এবং <= max(x,y)। বিশদ জানতে ডন হ্যাচের উত্তর দেখুন।

দ্রষ্টব্য: আমার অগ্রাধিকারটি দৃust় যথার্থতা। দক্ষতা ব্যয়যোগ্য। তবে, যদি অনেক শক্তিশালী এবং নির্ভুল অ্যালগরিদম থাকে তবে আমি সবচেয়ে কার্যকরটি বেছে নেব।


(+1) আকর্ষণীয় প্রশ্ন, আশ্চর্যের সাথে অ-তুচ্ছ।
কিরিল

1
অতীতে, ভাসমান পয়েন্টের মানগুলি মধ্যবর্তী ফলাফলের জন্য উচ্চতর নির্ভুলতার আকারে গণনা করা হত এবং ধরে রাখা হত। যদি একটি + বি (-৪-বিট ডাবলস) একটি ৮০ বিট মধ্যবর্তী ফলাফল তৈরি করে এবং এটিই ২ দ্বারা বিভক্ত হয়, আপনার অতিরিক্ত প্রবাহ সম্পর্কে চিন্তা করার দরকার নেই। যথার্থতা হ্রাস কম স্পষ্ট হয়।
জেডিগোসস

এর সমাধান তুলনামূলক সহজ বলে মনে হচ্ছে ( আমি একটি উত্তর যুক্ত করেছি )। বিষয়টি হ'ল আমি একজন প্রোগ্রামার এবং কম্পিউটার বিজ্ঞানের বিশেষজ্ঞ নই, তবে আমি কী অনুভব করছি যা এই প্রশ্নটিকে এত বেশি কঠিন করে তুলেছে?
আইকিউ আন্দ্রেয়াস

দুটি দ্বারা গুণন এবং ভাগের ব্যয় সম্পর্কে চিন্তা করবেন না; আপনার সংকলক আপনার জন্য সেগুলি অনুকূল করে তুলবে।
ফেডেরিকো পোলোনি

উত্তর:


18

আমি মনে করি যে হিগমের নির্ভুলতা এবং সংখ্যাগত অ্যালগোরিদমসের স্থায়িত্ব কীভাবে এই ধরণের সমস্যাগুলি বিশ্লেষণ করতে পারে তা সম্বোধন করে। অধ্যায় 2 দেখুন, বিশেষত অনুশীলন 2.8।

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

ধরুন আমি সেই দিয়েছি এবং আমি জানতে চাই z = ( x + y ) / 2 সন্তুষ্ট x z y কিনা । নিম্নলিখিত হাস্কেল কোড0এক্সYz=(x+y)/2xzy

import Data.SBV

test1 :: (SFloat -> SFloat -> SFloat) -> Symbolic SBool
test1 fun =
  do [x, y] <- sFloats ["x", "y"]
     constrain $ bnot (isInfiniteFP x) &&& bnot (isInfiniteFP y)
     constrain $ 0 .<= x &&& x .<= y
     let z = fun x y
     return $ x .<= z &&& z .<= y

test2 :: (SFloat -> SFloat -> SFloat) -> Symbolic SBool
test2 fun =
  do [x, y] <- sFloats ["x", "y"]
     constrain $ bnot (isInfiniteFP x) &&& bnot (isInfiniteFP y)
     constrain $ x .<= y
     let z = fun x y
     return $ x .<= z &&& z .<= y

আমাকে স্বয়ংক্রিয়ভাবে এটি করতে দেয় । এখানে test1 funহয় প্রতিজ্ঞা যে সব সসীম ভাসে জন্য এক্স , Y সঙ্গে 0 এক্স Yxfun(x,y)Yx,Y0xY

λ> prove $ test1 (\x y -> (x + y) / 2)
Falsifiable. Counter-example:
  x = 2.3089316e36 :: Float
  y = 3.379786e38 :: Float

এটি উপচে পড়েছে। ধরুন আমি এখন আপনার অন্যান্য সূত্রটি গ্রহণ করেছি: z- র=এক্স/2+ +Y/2

λ> prove $ test1 (\x y -> x/2 + y/2)
Falsifiable. Counter-example:
  x = 2.3509886e-38 :: Float
  y = 2.3509886e-38 :: Float

কাজ করে না (ধীরে ধীরে আন্ডারফ্লোর কারণে: , যা সমস্ত পাটিগণিত বেস -২ হওয়ার কারণে অপ্রকাশিত হতে পারে)।(এক্স/2)×2এক্স

এখন :z- র=এক্স+ +(Y-এক্স)/2

λ> prove $ test1 (\x y -> x + (y-x)/2)
Q.E.D.

কাজ করে! Q.E.D.একটি হল প্রমাণ যে test1সম্পত্তি হিসেবে উপরে বর্ণিত সব ভাসে জন্য ঝুলিতে।

একই সম্পর্কে, তবে ( 0 x y এর পরিবর্তে ) সীমাবদ্ধ ?এক্সY0এক্সY

λ> prove $ test2 (\x y -> x + (y-x)/2)
Falsifiable. Counter-example:
  x = -3.1300826e34 :: Float
  y = 3.402721e38 :: Float

ঠিক আছে, তাই যদি ওভারফ্লো হয় তবে z = x + ( y / 2 - x / 2 ) কেমন?Y-এক্সz- র=এক্স+ +(Y/2-এক্স/2)

λ> prove $ test2 (\x y -> x + (y/2 - x/2))
Q.E.D.

সুতরাং দেখে মনে হচ্ছে যে সূত্রগুলি আমি এখানে চেষ্টা করেছি তার মধ্যে কাজ করছে বলে মনে হচ্ছে (একটি প্রমাণ সহ,)। এসএমটি সলভার পদ্ধতিটি আমার কাছে পেনসিল এবং কাগজের সাথে ভাসমান-পয়েন্ট ত্রুটি বিশ্লেষণের মধ্য দিয়ে যাওয়ার চেয়ে সহজ ভাসমান-বিন্দু সূত্র সম্পর্কে সন্দেহের উত্তর দেওয়ার অনেক দ্রুত উপায় বলে মনে হয়।এক্স+ +(Y/2-এক্স/2)

পরিশেষে, নির্ভুলতা এবং স্থায়িত্বের লক্ষ্য প্রায়শই পারফরম্যান্সের লক্ষ্যের সাথে দ্বন্দ্বপূর্ণ হয়। পারফরম্যান্সের জন্য, আমি সত্যিই দেখতে পাই না আপনি কীভাবে চেয়ে আরও ভাল করতে পারবেন , বিশেষত যেহেতু সংকলকটি এখনও আপনার জন্য মেশিনের নির্দেশিকায় এটি অনুবাদ করার ভারী উত্তোলন করবে।(এক্স+ +Y)/2

পিএস এগুলি হ'ল একক-নির্ভুলতা আইইইই 7575৫ ভাসমান-পয়েন্ট পাটিগণিতের সাথে। আমি ডাবল-স্পষ্টতা পাটিগণিত (এর সাথে প্রতিস্থাপন ) সহ পরীক্ষা করেছিলাম এবং এটি খুব কার্যকর হয়।এক্সএক্স+ +(Y/2-এক্স/2)YSFloatSDouble

পিপিএস কোডটিতে এটি প্রয়োগ করার সময় একটি বিষয় মনে রাখতে হবে যে সংকলক পতাকাগুলির মতো -ffast-math(এই জাতীয় পতাকাগুলির কিছু ফর্মগুলি কখনও কখনও কিছু সাধারণ সংকলকগুলিতে ডিফল্টরূপে চালু করা হয় ) এর ফলস্বরূপ আইইইই 7575৫ পাটিগণিত হয় না, যা উপরের প্রমাণগুলিকে অকার্যকর করে দেয়। আপনি যদি এমন পতাকা ব্যবহার করেন যা সক্ষম করে, যেমন, সহযোগী সংযোজন অপ্টিমাইজেশন, তবে ব্যতীত অন্য কিছু করার কোনও মানে নেই ।(এক্স+ +Y)/2

পিপিপিএস আমি শর্ত ছাড়াই কেবল সাধারণ বীজগণিতিক অভিব্যক্তিগুলিতে একটু তাকিয়ে চলেছিডন ডিম পাড়া এর সূত্র কঠোরভাবে উত্তম।


2
অপেক্ষা কর; আপনি কি দাবি করেছেন যে যদি x <= y (x> = 0 বা না নির্বিশেষে) তবে x + (y / 2-x / 2) এটি করার একটি ভাল উপায়? আমার কাছে এটি সঠিক হতে পারে বলে মনে হচ্ছে, যেহেতু উত্তরটি যখন যথাযথভাবে উপস্থাপনযোগ্য হয় নিম্নলিখিত ক্ষেত্রে এটি ভুল উত্তর দেয়: x = -1, y = 1 + 2 ^ -52 (1 এর চেয়ে ছোটতম প্রতিনিধিত্বযোগ্য সংখ্যা), এই ক্ষেত্রে উত্তরটি 2 ^ -53। পাইথনে নিশ্চিতকরণ: >>> x = -1.; y = 1.+2.**-52; print `2**-53`, `(x+y)/2.`, `x+(y/2.-x/2.)`
ডন হ্যাচ

2
এক্স(এক্স+ +Y)/2Yএক্স,Y(এক্স+ +Y)/2(এক্স+ +Y)/2

8

প্রথমে লক্ষ করুন যে আপনার যদি এমন কোনও পদ্ধতি থাকে যা সমস্ত ক্ষেত্রে সর্বাধিক সঠিক উত্তর দেয় তবে তা আপনার প্রয়োজনীয় শর্তটি পূরণ করবে। (নোট আমি যে একটি বদলে সবচেয়ে সঠিক উত্তর সবচেয়ে সঠিক উত্তর, যেহেতু দুই বিজয়ীদের হতে পারে।) প্রুফ: যদি বিপরীত জন্য, আপনাকে একটি সঠিক হিসাবে সম্ভব উত্তর যে নেই আছে না প্রয়োজনীয় শর্ত সন্তুষ্ট, যে এর অর্থ হয় (যার ক্ষেত্রে একটি উত্তম উত্তর, একটি বৈপরীত্য), বা (যার ক্ষেত্রে একটি উত্তম উত্তর, একটি বৈপরীত্য)answer<min(x,y)<=max(x,y)min(x,y)min(x,y)<=max(x,y)<answermax(x,y)

সুতরাং আমি মনে করি এর অর্থ হল আপনার প্রশ্নটি একটি সুনির্দিষ্ট সম্ভাব্য উত্তর খুঁজে বের করতে পারে। আইইইই 7575 জুড়ে গাণিতিক ধরে নেওয়া, আমি নিম্নলিখিত প্রস্তাব করছি:

if max(abs(x),abs(y)) >= 1.:
    return x/2. + y/2.
else:
    return (x+y)/2.

আমার যুক্তি যে এটি সবচেয়ে সঠিক উত্তর দেয় তা হ'ল কিছুটা ক্লান্তিকর কেস বিশ্লেষণ। এখানে যায়:

  • কেস max(abs(x),abs(y)) >= 1.:

    • সাবকেস এবং এক্স বা y উভয়ই অস্বীকৃত নয়: এক্ষেত্রে গণিত উত্তর x/2.+y/2.একই ম্যান্টিসাসগুলিকে হেরফের করে এবং অতএব (x+y)/2আমরা যদি অতিরিক্ত প্রবাহ রোধ করতে বর্ধিত এক্সটেনশনগুলি ধরে নিই তবে ফলনটির গণনা হিসাবে ঠিক একই উত্তর দেয় । এই উত্তরটি রাউন্ডিং মোডের উপর নির্ভর করতে পারে তবে যে কোনও ক্ষেত্রে এটি আইইইই 475৫ দ্বারা সর্বোত্তম সম্ভাব্য উত্তর x+yহিসাবে গ্যারান্টিযুক্ত (এই গণনাটি গাণিতিক এক্স + ওয়াইয়ের সাথে সর্বাধিক সান্নিধ্য হিসাবে গ্যারান্টিযুক্ত, এবং ২ দ্বারা বিভাজনটি এই ক্ষেত্রে সঠিক কেস)।
    • সাবকেস এক্সকে অস্বীকৃত করা হয় (এবং তাই abs(y)>=1):

      answer = x/2. + y/2. = y/2. since abs(x/2.) is so tiny compared to abs(y/2.) = the exact mathematical value of y/2 = a best possible answer.

    • সাবকেস ওয়াই ডেনোরালাইজড (এবং তাই abs(x)>=1): অ্যানালগাস।

  • কেস max(abs(x),abs(y)) < 1.:
    • সাবকেস গণনা x+yহয় হয় নন-ডেনরমালাইজড বা ডেনারমালাইজড-এবং- "এমনকি": যদিও x+yগণনাটি সঠিক নাও হতে পারে, তবে এটি আইইইই 755 দ্বারা গাণিতিক এক্স + ওয়াইয়ের সর্বোত্তম সম্ভাব্যতা হিসাবে গ্যারান্টিযুক্ত। এক্ষেত্রে প্রকাশের পরবর্তী 2 দ্বারা বিভাজনটি (x+y)/2.হুবহু, সুতরাং গণিত উত্তরটি (x+y)/2.গাণিতিক (x + y) / 2 এর পক্ষে সম্ভাব্য সর্বোত্তম সম্ভাবনা।
    • সাবকেস গণনাটি ডেনারমালাইজড x+yএবং "বিজোড়" হয়: এক্ষেত্রে এক্স, ওয়াই এর একটিও অবশ্যই অস্বীকৃত-এবং- "বিজোড়" হওয়া আবশ্যক, যার অর্থ এক্স এর অন্যটি, y বিপরীত চিহ্নের সাথে অস্বীকৃত, এবং সুতরাং গণনাটি x+yহয় ঠিক গাণিতিক x + y, এবং তাই (x+y)/2.গণনাটি গাণিতিক (x + y) / 2 এর সর্বোত্তম সম্ভাব্যতা হিসাবে আইইইই 7575 দ্বারা গ্যারান্টিযুক্ত।

আমি বুঝতে পেরেছি যখন আমি "অস্বীকৃত" বলেছিলাম আসলে আমি অন্য কিছু বোঝাতে চাইছিলাম - অর্থাত্ সংখ্যাগুলি একে অপরের সাথে সংখ্যার কাছাকাছি অবস্থিত, অর্থাত্ সংখ্যার পরিসর যা অস্বীকৃত সংখ্যার পরিসরের চেয়ে দ্বিগুণ বড়, উদাহরণস্বরূপ, প্রথম আটটি টিকিট ডায়াগ্রামে en.wikedia.org/wiki/Denormal_number এ রয়েছে । মুল বক্তব্যটি হ'ল এগুলির মধ্যে "বিজোড়" হ'ল একমাত্র সংখ্যা যার জন্য তাদের দুটি দ্বারা ভাগ করা সঠিক নয়। এটি পরিষ্কার করার জন্য আমাকে উত্তরের এই অংশটি পুনরায় বাক্য বলার দরকার আছে।
ডন হ্যাচ

(পি(এক্স,Y))=পি(এক্স,Y)(1+ +δ)|δ|তোমার দর্শন লগ করাএক্স/2+ +Y/2(এক্স+ +Y)/2সর্বদা সঠিকভাবে বৃত্তাকার, অনুপস্থিত ওভার-প্রবাহ / অনুপস্থিত, সমস্ত কিছুই ওভার-/ আন্ডারফ্লোগুলিকে না দেখানো, যা সহজ।
কিরিল

@ কিরিল আমি কিছুটা হারিয়েছি ... তুমি কোথা থেকে এসেছ? এছাড়াও আমি এটি একেবারেই সত্য বলে মনে করি না যে "2 দ্বারা বিভাজনগুলি নন-ডেনরমাল সংখ্যার জন্য সঠিক" ... এটি একই জিনিসটি আমি ছাড়িয়েছি এবং এটি সঠিক করার চেষ্টা করা কিছুটা বিশ্রী বলে মনে হয়। সুনির্দিষ্ট বিবৃতিটি আরও কিছু "এক্স / 2 হ'ল যতক্ষণ না অ্যাবস (এক্স) সর্বনিম্ন সংখ্যার সর্বনিম্ন সংখ্যার দ্বিগুণ হয়" ... আর্গ, বিশ্রী!
ডন হ্যাচ

3

আইইইই--৫৪ বাইনারি ফ্লোটিং-পয়েন্ট ফর্ম্যাটগুলির জন্য, binary64(দ্বিগুণ নির্ভুলতা) গণনা দ্বারা অনুকরণীয়, এস বোল্ডো আনুষ্ঠানিকভাবে প্রমাণ করেছেন যে নীচে প্রদর্শিত সাধারণ অ্যালগরিদমটি সঠিকভাবে বৃত্তাকার গড় সরবরাহ করে।

সিলভি বোল্ডো, "ভাসমান-পয়েন্ট গড়ের গণনা করা প্রোগ্রামগুলির আনুষ্ঠানিক যাচাইকরণ" " ইন উপর আনুষ্ঠানিক প্রকৌশল পদ্ধতি আন্তর্জাতিক সম্মেলন , পিপি। 17-32। স্প্রিংগার, চাম, ২০১৫. ( অনলাইন খসড়া )

(এক্স+ +Y)/2এক্স/2+ +Y/2binary64সি[2-967,2970]সি যাতে কোনও নির্দিষ্ট ব্যবহারের ক্ষেত্রে সেরা পারফরম্যান্স সরবরাহ করা যায়।

এটি নিম্নলিখিত অনুকরণীয় ISO-C99কোড দেয়:

double average (double x, double y) 
{
    const double C = 1; /* 0x1p-967 <= C <= 0x1p970 */
    return (C <= fabs (x)) ? (x / 2 + y / 2) : ((x + y) / 2);
}

সাম্প্রতিক ফলোআপ কাজের ক্ষেত্রে, এস বোল্ডো এবং সহ-লেখকরা কীভাবে আইইইই -E৫4 দশমিক ভাসমান-পয়েন্ট ফর্ম্যাটগুলির জন্য ফিউজড মাল্টিপল-অ্যাড (এফএমএ) ক্রিয়াকলাপ এবং একটি সুপরিচিত নির্ভুলতা ব্যবহার করে সেরা ফলাফল অর্জন করবেন তা দেখিয়েছেন showed দ্বিগুণ বিল্ডিং ব্লক (টুসাম):

সিলভি বোল্ডো, ফ্লোরিয়ান ফাইসোল এবং ভিনসেন্ট টুরনিউর, "দশমিক ভাসমান-পয়েন্ট সংখ্যাগুলির সঠিক গড় গণনা করার জন্য একটি আনুষ্ঠানিক-প্রমাণিত অ্যালগরিদম" ইন কম্পিউটার পাটিগণিত (ARITH 25) উপর 25th আইইইই সিম্পোজিয়াম , জুন 2018, পিপি। 69-75। ( খসড়া অনলাইন )


2

যদিও এটি দক্ষ-দক্ষ পারফরম্যান্স-ভিত্তিক নাও হতে পারে, তবে (১) এটির একটি খুব সহজ উপায় রয়েছে তা নিশ্চিত করে নিন যে কোনওটি সংখ্যা দুটির চেয়ে বেশি নয় xবা y(কোনও উপচে পড়বে না) এবং (২) ভাসমান পয়েন্টটিকে "নির্ভুল" হিসাবে রাখুন সম্ভাব্য (এবং (3) যোগ করা বোনাস হিসাবে, বিয়োগফল ব্যবহার করা হলেও, কোনও মান কখনও নেতিবাচক সংখ্যা হিসাবে সংরক্ষণ করা হবে না।

float difference = max(x, y) - min(x, y);
return min(x, y) + (difference / 2.0);

প্রকৃতপক্ষে, আপনি যদি সত্যিই নির্ভুলতার জন্য যেতে চান, আপনার এমনকি ঘটনাস্থলে বিভাগ সম্পাদন করার প্রয়োজন নেই; শুধু মান আসতে min(x, y)এবং differenceযা আপনি কথাটি প্রক্রিয়া সহজ বা পরে নিপূণভাবে ব্যবহার করতে পারেন।


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

@ বেকো ইউ, আপনি কমপক্ষে দু'বার ভাগ করবেন। এছাড়াও, আপনি যে উদাহরণ দিয়েছেন তা উত্তরটি ভুল হয়ে আসতে পারে। এর গড়টি কল্পনা করুন 2,4,9, এটি গড়ের মতো নয় 3,9
আইকিউআন্দ্রিয়াস

আপনি ঠিক বলেছেন, আমার পুনরাবৃত্তি ভুল ছিল। নির্ভুলতা না হারিয়ে এখনই কীভাবে এটি ঠিক করা যায় তা সম্পর্কে নিশ্চিত নই।
বেকো

আপনি কি প্রমাণ করতে পারেন যে এটি সবচেয়ে সঠিক সম্ভাব্য ফলাফল দেয়? এটি যদি হয় xএবং yযদি ভাসমান-বিন্দু হয়, আপনার গণনাটি সবচেয়ে নিকটে ভাসমান-পয়েন্ট তৈরি করে (x+y)/2?
বেকো

1
এক্স, ওয়াই সর্বনিম্ন এবং সর্বশ্রেষ্ঠ প্রকাশযোগ্য সংখ্যা হলে কী এই উপচে পড়বে না?
ডন হ্যাচ

1

উচ্চতর অবক্ষয়কে রূপান্তর করুন, সেখানে মান যুক্ত করুন এবং ফিরে রূপান্তর করুন।

উচ্চতর যথোপযুক্ততায় কোনও ওভারফ্লো হওয়া উচিত নয় এবং যদি উভয়ই বৈধ ভাসমান পয়েন্টের পরিসরে থাকে তবে গণনা করা সংখ্যাটিও ভিতরে থাকা উচিত।

এবং এটি তাদের মধ্যে থাকা উচিত, যদি সংক্ষিপ্ততা পর্যাপ্ত না হয় তবে সবচেয়ে বড় সংখ্যার কেবলমাত্র অর্ধেকটি।


এটি হিংস্র শক্তি পদ্ধতির। এটি সম্ভবত কার্যকর হয় তবে আমি এমন একটি বিশ্লেষণ খুঁজছিলাম যেটির মধ্যবর্তী উচ্চতর নির্ভুলতার প্রয়োজন নেই। এছাড়াও, আপনি কতটা মধ্যবর্তী উচ্চতর নির্ভুলতা প্রয়োজন তা অনুমান করতে পারেন? যাই হোক না কেন, এই উত্তরটি মুছবেন না (+1), আমি কেবল উত্তর হিসাবে এটি গ্রহণ করব না।
বেকো

1

তাত্ত্বিকভাবে, x/2ম্যান্টিসা থেকে 1 বিয়োগ করে গণনা করা যেতে পারে।

তবে, বাস্তবে এর মতো বিটওয়াইজ অপারেশনগুলি বাস্তবায়ন করা সহজভাবে সহজ নয়, বিশেষত যদি আপনি আপনার ভাসমান পয়েন্ট সংখ্যার ফর্ম্যাটটি জানেন না know

আপনি যদি এটি করতে পারেন তবে পুরো অপারেশনটি 3 টি সংযোজন / বিয়োগফলে হ্রাস করা হয়েছে, যা উল্লেখযোগ্য উন্নতি হওয়া উচিত।


0

আমি @ রোল্যান্ড হিথ হিসাবে একই লাইন ধরে ভাবছিলাম কিন্তু এখনও কোনও মন্তব্য করতে পারছি না, এখানে আমার গ্রহণ করুন:

x/2থেকে 1 বিয়োগ করে নির্ণিত করা যেতে পারে এক্সপোনেন্ট (না অংশক, অংশক থেকে 1 বিয়োগ বিয়োগ করা হয় 2^(value_of_exponent-length_of_mantissa)সামগ্রিক মান থেকে)।

সাধারণ মামলার সীমাবদ্ধতা ছাড়াই ধরা যাক x < y। (যদি x > y, ভেরিয়েবল relabel। যদি x = y, (x+y) / 2তুচ্ছ হয়।)

  • ট্রান্সফর্ম (x+y) / 2মধ্যে x/2 + y/2(এক্সপোনেন্ট থেকে এক দ্বারা) দুই পূর্ণসংখ্যা subtractions দ্বারা, সম্পাদনা করা যেতে পারে যা
    • তবে আপনার প্রতিনিধিত্বের উপর নির্ভর করে ঘনিষ্ঠের উপর একটি নিম্ন সীমা রয়েছে। যদি 1 টি বিয়োগের আগে আপনার ঘনিষ্ঠটি ইতিমধ্যে ন্যূনতম হয় তবে এই পদ্ধতির বিশেষ কেস হ্যান্ডলিংয়ের প্রয়োজন হবে। একটি ন্যূনতম ঘাঁটিঘটিত প্রতিনিধিত্বমূলকের চেয়ে ছোট xতৈরি করবে x/2(ধরে নিবেন ম্যান্টিসাকে একটি অন্তর্নিহিত শীর্ষস্থানীয় 1 দিয়ে উপস্থাপন করা হবে)।
    • এর সূচক থেকে 1 টি বিয়োগের পরিবর্তে, এর ম্যান্টিসাকে একে একে ডানে xস্থানান্তরিত xকরুন (এবং অন্তর্নিহিত শীর্ষস্থানীয় 1 যুক্ত করুন, যদি থাকে)।
    • Y এর সূচক থেকে 1 বিয়োগ করুন, যদি এটি ন্যূনতম না হয়। যদি এটি ন্যূনতম হয় (y x এর চেয়ে বড়, ম্যান্টিসার কারণে), ম্যান্টিসাকে একে একে ডানদিকে সরান (অন্তর্নিহিত শীর্ষস্থানীয় 1 যুক্ত করুন, যদি থাকে)।
    • এর উদ্দীপক xঅনুসারে ডানদিকে নতুন ম্যান্টিসা স্থানান্তর করুন y
    • ম্যান্টিসিতে পূর্ণসংখ্যা সংযোজন করুন, যতক্ষণ না এর ম্যান্টিসা পুরোপুরি সরিয়ে চলেছে x। যদি উভয় ক্ষয়ক্ষতিই ন্যূনতম হয় তবে নেতৃস্থানীয়গুলি উপচে পড়বে, যা ঠিক আছে, কারণ সেই ওভারফ্লো আবার একটি অন্তর্নিহিত শীর্ষস্থানীয় হয়ে উঠবে বলে মনে করা হচ্ছে।
  • এবং একটি ভাসমান পয়েন্ট সংযোজন।
    • এখানে কোনও বিশেষ মামলার কথা ভাবা যায় না; বৃত্তাকার বাদে যা উপরে বর্ণিত স্থানান্তরিত প্রযোজ্য।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.