PDA

View Full Version : حرفه ای: نوشتن این کد بدون استفاده از شرط



UfnCod3r
جمعه 15 شهریور 1392, 12:04 عصر
سلام کسی می تونه این کد رو طوری بنویسی که شرط یا در واقع پرشی انجام نشه

float sign = (product < 0.0f) ? -1.0f : 1.0f;

ممنون.

1485159
جمعه 15 شهریور 1392, 12:16 عصر
product رو به قدر مطلقش تقسیم کن و مقدارش رو بریز تو sign.
البته اگه product صفر باشه این کار رو نمیتونی انجام بدی. در ضمن خود قدر مطلق هم فکر کنم با عبارت شرطی پیاده سازی شده که در این صورت این روش درست نیست.
شاید بتونی از بیت علامت هم استفاده کنی.

1485159
جمعه 15 شهریور 1392, 12:39 عصر
در مورد بیت علامت یه مثال میزنم ولی نمیدونم تا چه حدی به کارت بیاد:
فرض کن x یک متغیر یک بایتی از نوع صحیح باشه که اعداد منفی رو هم شامل میشه:

x = (-) - - - - - - -
اگه اون بیتی رو که مشخص کردم بیت علامت در نظر بگیریم:
اگه 1 باشه یعنی x منفیه و اگه 0 باشه یعنی x منفی نیست(شامل صفر هم میشه).

حالا میگیم:

sign = x and 10000000

دوباره میگیم:


sign = sign * (sign - 3) + 1

البته اینا حدسیات من بود شاید عملی نباشه. :لبخند:

UfnCod3r
جمعه 15 شهریور 1392, 13:07 عصر
خیلی ممنون همون اولی بدردم خورد .:بوس:
بیت ها اینجا ب کارم نمیاد .این اخری هم اشتباهه ها :متفکر:
sign * (sign - 3) + 1

1485159
جمعه 15 شهریور 1392, 13:15 عصر
خیلی ممنون همون اولی بدردم خورد .
خدا رو شکر. :لبخندساده:

بیت ها اینجا ب کارم نمیاد .این اخری هم اشتباهه ها
sign * (sign - 3) + 1
چرا؟
اگه sign صفر باشه حاصل این عبارت میشه 1 و اگه sign یک باشه حاصلش میشه -1.

UfnCod3r
جمعه 15 شهریور 1392, 13:39 عصر
نه هیچی درسته .:لبخندساده:
ولی خب چه کاریه اینهمه ضربو .. انجام بدم . من دنبال راه سریع بودم . هرچند که اون تقسیم هم خوب نیست . ولی از هیچی بهتره :لبخند:
بازم ممنون .:قلب:

omidshaman
جمعه 15 شهریور 1392, 14:50 عصر
خب الان راه اول کجاش سریع تر از اون if ایه که گزاشتی؟!
عدد تقسیم به قدر مطلق ؟! برای بدست اوردن قدر مطلق هم باید از if استفاده کنی دیگه تازه یک تقسیم هم اضافه میشه!! :متفکر:
تازه این کار برای 0 هم جواب نمیده یعنی یک if دیگه هم میخواد که چک کنه 0 ه یا نه !

UfnCod3r
جمعه 15 شهریور 1392, 15:09 عصر
نه قدر مطلق خودش ی دستور العمل جداست . FABS
http://www.website.masmforum.com/tutorials/fptute/fpuchap8.htm
تو اون کد معمولی مقایسه انجام می شه + ی پرش داره. من نمی خواستم پرش داشته باشه . بیچاره سی پیو نمی تونه بفهمی دستور بعدی ای که باید اجرا کنه کدومه :متفکر:
http://en.wikipedia.org/wiki/Branch_predictor
http://en.wikipedia.org/wiki/Branch_%28computer_science%29
عددم هم هیچ وقت 0 نیست :لبخند:
:شیطان::شیطان::شیطان::شیطان:: یطان::شیطان::شیطان::شیطان::ش طان::شیطان::شیطان::شیطان::شی ان::شیطان::شیطان::شیطان::شیط ن::شیطان::شیطان::شیطان::شیطا ::شیطان::شیطان::شیطان:

1485159
جمعه 15 شهریور 1392, 15:23 عصر
نه قدر مطلق خودش ی دستور العمل جداست . FABS
خود همین هم از بیت علامت استفاده میکنه.