PDA

View Full Version : تابع float



hamid.hashemi202
جمعه 16 فروردین 1392, 22:50 عصر
sum = sum + (i+2) / ((float)(i * (i + 1)));
در اين خط برنامه تابع float چه کاری را انجام می دهد؟

Arcsinos
جمعه 16 فروردین 1392, 23:35 عصر
سلام دوست عزیز، کلمه ی float که در اینجا نوشته شده یک تابع نیست بلکه یک explicit inline casting هست و cast کردن در برنامه نویسی به این معنیه که شما موقتا یه نوعی رو به نوع دیگه تبدیل میکنید در این جا i*i+1 یه عدد صحیح است ولی شما میایید با این Cast این عدد صحیح رو به یک عدد float تبدیل میکنید در نتیجه نتیجه ی تقسیمی هم که انجام میدهید یه عدد float هست.
به عنوان مثال دیگه فکر کن شما یه متغیر float avg داری و میخوای تو این متغیر میانگین سه تا عدد 2 و 2و 3 رو بریزی اگه بیای مستقیما این سه تا عدد رو جمع کنی و تقسیم بر سه کنی میانگین این سه عدد بر خلاف انتظار میشه 2 . مثلا اگه بنویسی avg=(2+2+3)/3 خواهی دید که avg دو شد ولی اگه بیای موقتا جمع سه عدد رو به float ، کست cast کنی جواب درست در میاد .اینجوری avg=(float)(2+2+3)/3 تقسیم یه عدد صحیح به صحیح یه عدد صحیحه ولی یه تقسیم یه float به صحیح float هست.
یه مثال دیگه میزنم که دیگه مطلب جا بیوفته فرض کن یه متغیر داری به اسم int myint و یه متغیر دیگه داره که اینطوری تعریفش کردی object num=10 همونطور که مشخصه نوع num یه عدد صحیحه ولی به این حال تو نمیتونی بیای بگی myint=num چون نمیتونی (البته گاهی اوقات برای برخی از cast ها که به implicit معروف هستند این کار به صورت خودکار و ضمنی انجام میشه) خلاصه برای اینکه num رو بریزی توی myint میای از cast استفاده میکنی و مینویسی myint=(int)num که در اینصورت مقدار myint میشه 10 و نوع num هم تغییر نمیکنه و همون object میمونه.
موفق باشی

hamid.hashemi202
شنبه 17 فروردین 1392, 00:39 صبح
در برنامه اين float را در مخرج برده اگر در صورت بنوطسيم چرا جواب نمی دهد؟مثلا(i/i+1)float همان خارج قسمت را می دهد ولی i/float (i+1) جواب دقيق می دهد.چرا؟

hamid.hashemi202
شنبه 17 فروردین 1392, 23:52 عصر
ميشه لطف کنيد جواب دهيد

erfan_urchin
یک شنبه 18 فروردین 1392, 00:11 صبح
(float)(i/i+1)
حمیدجان تو این کد میاد اول i رو تقسیم بر خودش میکنه که میشه 1 و بعد بعلاوه 1 میکنه که میشه 2
اما دومین کد درسته i/(float) (i+1)
چون میاد اول i+1 میکنه و بعد i رو تقسیم بر اون میکنه
یعنی اگه مثلا i=10 باشه اول میاد 1+10 میکنه که میشه 11 بعد میاد 10 رو تقسیم بر 11 میکنه. به خاطر همین این کد جواب دقیق رو میده

hamid.hashemi202
یک شنبه 18 فروردین 1392, 23:54 عصر
ببخشيد پس چرا 2 ورودی مثل a,b می گيريم و a/b را در برنامه می نويسيم مقدار دقيق را می دهد ولی در مثال بالا جواب نمی دهد؟

mehrdad1991h
دوشنبه 19 فروردین 1392, 01:27 صبح
ببخشيد پس چرا 2 ورودی مثل a,b می گيريم و a/b را در برنامه می نويسيم مقدار دقيق را می دهد ولی در مثال بالا جواب نمی دهد؟

شما با اولویت ها اشنایی ندارید
ببین در اعمال ریاضی در برنامه اولین اولیت را پرانتز داره
بزار رو مثال خودت بگم یه کمی بهتر بفهمی
ببین
a/b فقط 2 تا عدد هستن یکی a , دیگری b خوب اینجا عملی که باید انجام بشه فقط و فقط یک تقسیم هست ولی اگر مثلا a+b*c/d+e*f را داشته باشیم نتیجه کاملا اشتباه در میاد (ساده بخوام بگم خیلی اشتباه میکنه ولی ساده اینه که تیکه اول را که حساب کرد درجا تقسیم میکنه بر d تنها و بعد حاصل را جمع و ضرب میکنه)
برا این که درست در بیاد باید اینجوری بنویسیمش (a+b)*c)/((d+e)*f)) اینجوری اول حاصل جمع a, b را حساب میکنه بعد در C ضرب میکنه بعد حاصل جمع d,e را حساب میکنه و در f ضرب میکنه و نهایتا نتیجه این دوتا ( ابی و قرمز )را بر هم تقسیم میکنه کخ درست در میاد
امیدوارم بفهمید چی میگم
ببخشید اگر بد توضیح دادم (درباره اولویت های اعمال ریاضی ذر برنامه نویسی سرچ کن میفهمی چی میگم)
موفق باشید

---------ادیت----------
بیا داداش سرچ کن بعد تاپیک بزن همینجوری دستت خوبه تو تاپیک زدن ها :)
بیا این اولویت ها همینجا میگم که بدونی
1: ( )
2: ^
3: * , /
4: \
5: باقیمانده %
6: + , -

یعنی به ترتیب در یک محاسبه ی ریاضی اول این ها را به ترتیب حساب میکنه و بعد میره جلو همینجور یعنی مثلا این 1+2*3+5/4-7 در این اول میاد پرانتز چک میکنه میبینه نداره میره توان بازم نداره میره * و تقسیم همزمان این 2 را چک میکنه یعنی در این مثال5/4 و 3*2 میکنه و نهایتا بقیه تا میرسه به + و منها جواب های به دست اومده را همه را با هم جمع و تفریق میکنه !

اوکی ؟
الان مفید واقع شد برای شما ؟