PDA

View Full Version : سوال: مشکل در تعریف جمع، تفریق ، مد برای اعداد 96 بیتی



hafez1
جمعه 13 شهریور 1394, 17:03 عصر
سلام دوستان.من یه برنامه نوشتم با اعداد 96 بیتی که توابع جمع و تفریق و مد رو خودم براش تعریف کردم.فقط یه مشکلی هست و اون این که آخر تابع محاسبه جمع من تابه مد رو صدا میزنم و در تابع مد از تابع تفریق استفاده میکنم این توابع اونقدر داخل برنامم تو در تو شدن که تا بینهایت باید توابع جمع و مد و تفریق برای مقادیر ورودی متفاوت تعریف کنم.و هیچ وقت به جواب نمیرسم.
من فایل برنامه رو ضمیمه کردم .
اگر بخام واضح تر توضیح بدم به این صورته:
در فایل protocol & attac.cpp داخل حلقه for که از خط 60 شروع میشه ابتدا توابع generaten1 و generaten1 صدا زده میشن که دو عدد تصادفی n1 وn2 رو تولید میکنن.
سپس تابع compute A صدا زده میشه که مقدارA رو با xor کردن مقادیر ورودی تابع محاسبه میکنه.
سپس تابعB compute صدا زده میشه باید مقدار B رو محاسبه کنه که برای محاسبه آن نیاز به جمع کردن دو عدد 96 بیتی داریم که باید حاصل 96 بیتی هم برگردونن.
یک تابع جمع برای دو عدد 96 بیتی نوشتم که چون ممکنه حاصل جمع حداکثر 97 بیتی بشه ، از مد استفاده کردم.یعنی مد حاصل جمع رو نسبت به 2 به توان 96 میگیرم.
البته برای محاسبه مد هم یک تابع نوشتم که مد عدد اول نسبت به عدد دوم این طور محاسبه میشه که مقدار عدد دوم رو از عدد اول کم میکنیم تا جایی که حاصل کوچکتر از عدد دوم شود این مقدار همان حاصل مد است.
پس در اینجا من یه تابع مد دو عدد 97 بیتی دارم که داخلش تابع تفریق دو عدد 97 بیتی صدا زده میشه.
تفریق رو به این صورت در نظر گرفتم که از عدد دوم مکمل میگیریم سپس با یک جمع می کنیم و در نهایت بیت آخر که بیت علامت هست رو در نظر نمی گیریم.
با توجه به این که حاصل تفریق دو عدد 97 بیتی ممکنه 98 بیتی بشه (چون با استفاده از جمع نوشته شده) با ید از اون مد در پایه 2 به توان 96 گرفته بشه ، پس دوباره نیاز به تعریف یک تابع مد جدید برای محاسبه مد یک عدد 98 بیتی و یک عدد 97 داریم.
به این صورت توابع مد و تفریق یکدیگر رو صدا میزنن و تا بی نهایت نیاز به نوشتن توابع جدید داریم.

اگر کمکم کنید خیلی خیلی ممنون میشم.
به جوابش نیاز دارم.