كيف توجد القيمة الوسطى لعددين من غير جمع وقسمة ..
أي أريد حساب
(a+B)/2
:confused: :confused: :confused: :confused: :confused: :confused: :confused:
(yess)
:mad: :mad: :mad: :mad: :mad: :mad: :mad: :mad:
الإزاحة هي قسمة على 2
[Code2]
إذا كان a>b
(a+B)/2 = (a - b +2b)/2 = (a-B)/2 + b
[/Code2]
بهالطريقة ما رح ينتج عندك overflow
:P
كمل لحالك :P :P :P
حسنا تأخرتو كثيرا بالحل لذلك سوف أضع الحل :::
دارة الجامع النصفي عبارة عن التالي : ( دخلها a , b ) وخرجها ( s , c )
a و b عبارة عن البتين الذان نريد جمعهما وال s عبارة عن نتيجة الجمع و c عبارة عن الحمل الذي سوف نجمعه مع ال البتين التاليين ..
معادلة s هي أن النتيجة واحد عندما يكون أحد البتين 1 أو :
s = a XOR b
والحمل ينتج لدينا إذا كان البتين هما واحد أي ببساطة هذه هي المعادلة :
c = a AND b
الآن من أجل تطبيق دارة الجمع كاملة يجب أن نجمع الحمل مع البتات التالية وهذا يقتضي ازاحة كالتالي :
sum32 = a XOR b + ((a AND B) SHL 1)
الازاحة على اليمين هب عبارة عن ضرب ب 2 كما نعرف . الآن من أجل أخذ المتوسط نكتفي بقسمة القيمة السابقة على 2 فتختفي الازاحة على اليمين وينتج عندنا ازاحة أخرى كالتالي :
sum32/2 = ((a XOR B) SHR 1) + a AND b
وهي المعادلة التي نحصل من خلالها على متوسط من غير أن نحصل على أي overflow .. وممكن أن نكتبها بالسي كالتالي :
avg = (a^b >> 1) + a&b;
:):)
Coding on the Cloud and for the Cloud!
100%(f)
هذا الموضوع مغلق.