| نویسنده |
پیغام |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
جمعه 09 دي 1384، ساعت 23:48 |
|
 |
2 سال و 11 ماه پيش |
|
#1
|
| |
|
|
|
|
 |
رند  سال صفري!
تاريخ عضويت: سهشنبه 15 مهر 1382 مجموع ارسالها: 57 اعتبار کسب شده: 3000 محل سکونت: کلبه اي در دوردست بر روي دريا... جنسيت: نامشخص |
 |
شنبه 10 دي 1384، ساعت 3:47 |
|
 |
2 سال و 11 ماه پيش |
|
#2
|
| |
و در جواب mhaji:
من فکر میکنم به دو دلیل ممکنه ما از x+0 استفاده کنیم:
1: برای binding کردن:
چون 0+و 0- هم مثل NaN در ++VC، در گروه مقادیر special به حساب میان، و ما ميتونيم براي static Initialization و aggregate initialization از 0+ يا 0- استفاده کنيم(x+0 or x-0).
2- floating points optimization :
از اونجا که کامپايلر هاي ++C براي کاهش حجم برنامه و افزايش سرعت اون از روش هاي مختلف فشرده سازي و optimization بر روي متغير هاي floating point استفاده ميکنند که باعث تغيير نتيجه و دقت محاسبه اعشاري ميشه و 0+ , 0- هم باعث optimizatiion در محاسبه ميشه يعني x+0 ممکنه مقدار اوليه x رو تغيير بده.
حالا اگه ما در تنظيمات کامپايلر رفتار floating point رو عوض کنيم و اعمال optimization و precision رو غير فعال کنيم، عبارت x+0 ممکنه باعث raise شدن يک exception بشه.
شايد اينجاMSDN: specify floating point behavior اطلاعات به درد به خور بيشتري پيدا بشه.
اينم فقط به خاطر اين که mhaji ! هستي سعي کردم کمتر از سه روز فکر کنم. |
|
_________________ شادي از خرد عاقل تر است..
Will. Durant
|
|
|
|
|
 |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
شنبه 10 دي 1384، ساعت 14:32 |
|
 |
2 سال و 11 ماه پيش |
|
#3
|
| |
|
|
|
|
 |
احسان  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 4997 اعتبار کسب شده: 6467 محل سکونت: شيراز سن: 27 جنسيت: مرد |
 |
شنبه 10 دي 1384، ساعت 15:06 |
|
 |
2 سال و 11 ماه پيش |
|
#4
|
| |
|
|
|
|
 |
رند  سال صفري!
تاريخ عضويت: سهشنبه 15 مهر 1382 مجموع ارسالها: 57 اعتبار کسب شده: 3000 محل سکونت: کلبه اي در دوردست بر روي دريا... جنسيت: نامشخص |
 |
شنبه 10 دي 1384، ساعت 15:24 |
|
 |
2 سال و 11 ماه پيش |
|
#5
|
| |
Mhaji،
منظور من از مورد دوم لزوماً پرتاب کردن استثنا نبود. مثلاً x=<x+0 باعث عمل optimization روي عدد اعشاري ميشه.
روش اول هم binding بود که باز مثلاً x=<x+0 متغير x رو BIND مي کنه(راستش ولي خودم نمي دونم به چي بايد BIND کنه!). مثل عمل casting که احسان هم بهش اشاره کرد. اينجا رو هم نگاه کن: IEEE 754 Support in C99
قسمت binding special Values |
|
_________________ شادي از خرد عاقل تر است..
Will. Durant
|
|
|
|
|
 |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
شنبه 10 دي 1384، ساعت 22:37 |
|
 |
2 سال و 11 ماه پيش |
|
#6
|
| |
يک روز گذشت...
و جوابها البته تا حالا بد نبوده
يک راهنمايي: کاربردي که من از x + 0 سراغ دارم در ++ C هست نه C ! (در سوال هم ننوشته بودم ++ C / C !) |
|
|
|
|
|
|
 |
رند  سال صفري!
تاريخ عضويت: سهشنبه 15 مهر 1382 مجموع ارسالها: 57 اعتبار کسب شده: 3000 محل سکونت: کلبه اي در دوردست بر روي دريا... جنسيت: نامشخص |
 |
يکشنبه 11 دي 1384، ساعت 14:10 |
|
 |
2 سال و 11 ماه پيش |
|
#7
|
| |
|
Im afraid, I cant write farsi at present because of lack of farsi font in the computer Im working with,
But, ..
Mhaji! Im realy wondered if you have another solution for mentioned question, and intrested in finding out the answer of the question and that would be kind if you give some help regard this problem.
I think this will be a k ind of trick! in your answer!
|
|
_________________ شادي از خرد عاقل تر است..
Will. Durant
|
|
|
|
|
 |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
يکشنبه 11 دي 1384، ساعت 22:10 |
|
 |
2 سال و 11 ماه پيش |
|
#8
|
| |
دو روز گذشت...
هيچ کلکي تو کار نيست
من يک برنامه ++ C ميخوام که کاربرد اين عبارت رو نشون بده.
وقتي جواب رو بگم تعجب و شايد تحصن کنيد به هر حال جواب احسان نقطه شروع خوبيه. |
|
|
|
|
|
|
 |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
دوشنبه 12 دي 1384، ساعت 23:24 |
|
 |
2 سال و 11 ماه پيش |
|
#9
|
| |
سه روز گذشت...
قرار بود جواب رو الان بنويسم، اما چون دوست دارم حلش کنيد يک روز ديگه وقت ميدم
راهنمايي: Generic فکر کنيد!!! |
|
|
|
|
|
|
 |
رند  سال صفري!
تاريخ عضويت: سهشنبه 15 مهر 1382 مجموع ارسالها: 57 اعتبار کسب شده: 3000 محل سکونت: کلبه اي در دوردست بر روي دريا... جنسيت: نامشخص |
 |
سهشنبه 13 دي 1384، ساعت 12:09 |
|
 |
2 سال و 11 ماه پيش |
|
#10
|
| |
 ....  ..  ....
maybe you dont mean a technical trick. maybe it is about a program t use this statement wisely!.
Im thinking generic but nothing appears !
I no longer can think so missed up.
But if I had more time I would solve it.
|
|
_________________ شادي از خرد عاقل تر است..
Will. Durant
|
|
|
|
|
 |
nobody  سال صفري!
تاريخ عضويت: يکشنبه 19 مهر 1383 مجموع ارسالها: 33 اعتبار کسب شده: 3000 محل سکونت: شب جنسيت: نامشخص |
 |
سهشنبه 13 دي 1384، ساعت 17:44 |
|
 |
2 سال و 11 ماه پيش |
|
#11
|
| |
|
+ like any other operators or functions can do any thing you want, with its operands as arguments. I think x is the unknown part of the expression not + |
|
_________________ آن کس که ايمان ندارد، چگونه قدم برمي دارد؟
|
|
|
|
|
 |
mhaji  آخر آدم بيکار!
تاريخ عضويت: دوشنبه 19 خرداد 1382 مجموع ارسالها: 3420 اعتبار کسب شده: 3000 محل سکونت: Montreal جنسيت: مرد |
 |
سهشنبه 13 دي 1384، ساعت 22:49 |
|
 |
2 سال و 11 ماه پيش |
|
#12
|
| |
و جوابي که منتظرش بوديد:
template <class T>
class LabelNumerical : public ...
{
private:
T val;
public:
...
virtual const char* toString() const
{
std::ostringstream ss;
ss<< ( val + 0 );
static string s;
s.clear();
s.append(ss.str());
return s.c_str();
}
}; // end of class
// Ok, val will be treated as an integer and so toString has the desired effect here:
typedef LabelNumerical<unsigned char> LabelUChar;
typedef LabelNumerical<int> LabelInt; // Ok, + 0 has no effect
// BUT NOT: typedef LabelNumerical<string> LabelString; ! Compile time error !
اين قطعه کد، کاربرد واقعي عبارت val + 0 رو نشون داد. دقت کنيد که val + 0 علاوه بر اينکه داره يک نوع ضعيف (weak type) رو تحميل ميکنه (يعني جمع با 0 بايد براي T تعريف شده و بي اثر باشه)، عددهايي از جنسchar رو با cast کردن به int به درستي تبديل به رشته عددي ميکنه. نکته جالب اينه که در اينجا عباراتي مثل (int) x يا (double) x در حالت کلي غلطند!
و حدس (فقط حدس!) ميزنم x * 1 قابل استفاده نيست چون ممکنه کامپايلر بهينه اش کنه (براي اطلاعات بيشتر ميتونيد به مرجعي که رند داد بود مراجعه کنيد)
البته با توجه به قابليتهاي منحصر به فرد ++ C از قبيل operator overloading، automatic type conversion و از همه مهمتر template، به سادگي ميشه برنامه هايي نوشت که در اونها عبارت x + 0 يک کار دلخواه انجام بده، و من در اينجا nobody رو تشويق ميکنم احتمالا اگه باز هم وقت اين معما رو تمديد ميکردم، احسان يا رند ميتونستند جواب کامل رو پيدا کنند. به هر حال جايزه اي که در نظر گرفته بودم يک 206 آبي بود که متاسفانه برنده نداشت |
|
|
|
|
|
|
 |
|
|