فلوٹ اور ڈبل کے درمیان فرق - میں کون کون استعمال کرنا چاہئے؟

Anonim

(نوٹ: یہ مضمون یہ سمجھتا ہے کہ قارئین کمپیوٹر سائنس کے بنیادیات کے بارے میں جانتے ہیں)

کمپیوٹر سائنس میں داخل ہونے والے کئی نوکری پروگرامرز / طالب علم اکثر پوچھے گئے سوالات سے پوچھتے ہیں جو وہ کمپیوٹر سائنس کے اندر مخصوص فیلڈ سے متعلقہ ہیں. زیادہ سے زیادہ ابتدائی نصاب نمبر نظام کے موضوعات کے ساتھ شروع کرتے ہیں جو جدید کمپیوٹرز میں استعمال کیا جاتا ہے، بشمول بائنری ، दशमलव ، اولٹ اور ہییکسڈیکمل < نظام. یہ کمپیوٹر نمبر فارمیٹس ہیں جو کمپیوٹرز میں عددی اقدار کی داخلی نمائندگی ہیں (یا کیلکولیٹر اور کسی قسم کی ڈیجیٹل کمپیوٹرز). یہ اقدار "بٹس کے گروپ" کے طور پر محفوظ ہیں.

جیسا کہ ہم جانتے ہیں کہ کمپیوٹرز بائنری ہندسوں کے سیٹ میں اعداد و شمار کی نمائندگی کرتے ہیں (یعنی، 1s اور 0s کے مجموعہ میں، جیسے 1111 کی نمائندگی کرتا ہے 15 ڈیسسی نظام میں)، یہ مختلف نمبر فارمیٹس کے بارے میں سکھایا جا سکتا ہے جو اقدار کی متحرک رینج کی نمائندگی کرنے کے لئے استعمال کیا جاتا ہے، کیونکہ وہ حساب / نمبر پروسیسنگ کے بنیادی بلاکس بناتے ہیں کسی بھی قسم کے آپریشن میں. ایک بار جب کلاس روم (اکثر غریب) میں نمبر نظام کی وضاحت کی جاتی ہے تو، طالب علموں کو اسی قسم کے (مختلف، فلوٹنگ پوائنٹ ریاضی ) میں مختلف نمبر فارمیٹس پر منتقل کرنے کی آزمائش کی جاتی ہے جس میں کچھ صحت مند اور تعداد کی حد ہوتی ہے. اس طرح، وہ کچھ اقسام کے درمیان نونوں کو سیکھنے کے لئے مجبور ہیں. سب سے عام استعمال کردہ ڈیٹا کی اقسام میں سے دو فلاٹ اور ڈبل ہیں، اور جب وہ اسی ضروریات کو ہدف دیتے ہیں (یعنی سچل پوائنٹ ریاضی)، وہاں کافی ہیں ان کی اندرونی نمائندگی میں کچھ فرق اور پروگرام میں حساب سے متعلق مجموعی اثر. یہ بدقسمتی سے ہے کہ بہت سے پروگرامرز فلیٹ اور دوہری ڈیٹا کی اقسام کے درمیان نونوں کی کمی محسوس کرتے ہیں، اور ان جگہوں میں ان کو غلط استعمال کرتے ہیں جہاں انہیں پہلی جگہ میں استعمال نہیں ہونا چاہئے. بالآخر پروگرام کے دیگر حصوں میں مالیاتی نتائج کا نتیجہ.

اس آرٹیکل میں، میں آپ کو پروگرامنگ زبان میں کوڈ مثال کے ساتھ فلوٹ اور ڈبل کے درمیان فرق بتانا چاہتا ہوں. آو شروع کریں!

فلوٹ بمقابلہ ڈبل … کیا معاملہ ہے؟

فلوٹ اور ڈبل ڈیٹا ڈیٹا کی نمائندگی کرتے ہیں جو فلوٹنگ نقطہ ریاضی عملیات کے لئے استعمال کیے جاتے ہیں، آپ کو ریاضی کی کلاس میں شمار کرتے ہیں، جس میں آپ کی تعداد میں شمار ہوتے ہیں، جیسے

20. 123

، 16. 23 ، 10. 2 ، وغیرہ، وہ پوری تعداد نہیں ہیں (یعنی 2 ، 5 ، 15 ، وغیرہ)، لہذا انہیں اس کی ضرورت ہوتی ہے بائنری میں تقسیم نتیجے میں ڈس کلیمر نمبر (یعنی، 20. 123 ، 16 23، 23 ، وغیرہ.) عام بائنری شکل (i.e.، انوگر) کے ساتھ آسانی سے نمائندگی نہیں کی جا سکتی. فلوٹ اور ڈبل کے درمیان اہم فرق یہ ہے کہ سابق ایک درست صحت سے متعلق (32 بٹ) سچل نقطہ ڈیٹا ہے، جبکہ بعد میں دوہری صحت سے متعلق (64 بٹ) سچل نقطہ ڈیٹا کی قسم ہے. ڈبل "دوہری" کہا جاتا ہے کیونکہ یہ بنیادی طور پر فلوٹ کے ایک ڈبل صحت سے متعلق ورژن ہے. اگر آپ ایک بڑی رقم کا حساب کر رہے ہیں (تعداد میں ہزاروں کی تعداد میں 0)، پھر غلطی ڈبل میں ہوگی اور آپ کو زیادہ صحت سے متعلق نہیں کھو جائے گی.

یہ کوڈ مثال کے طور پر استعمال کرنے کے لئے بہتر ہے. سی زبان میں فراہم کی ریاضی کے افعال کے ذریعے مندرجہ بالا فلوٹ اور ڈبل پر عمل ہے: شامل کریں

int main () {

فلوٹ num1 = 1. f / 82؛

فلوٹ num2 = 0؛

کے لئے (int i = 0؛ i <738؛ ++ i)

num2 + = num1؛

printf ("٪ 7g n"، نمبر 2)؛

ڈبل نمبر 3 = 1. 0/82؛

ڈبل num4 = 0؛

کے لئے (int i = 0؛ i <738؛ ++ i)

num4 + = num3؛

printf ("٪ 15g n"، num4)؛

getchar ()؛

}

یہ ذیل میں پرنٹ کرتا ہے:

9. 000031

8. 99999999999983

یہاں، آپ دیکھ سکتے ہیں کہ فلوٹ اور ڈبل کی صحت سے متعلق میں تھوڑا سا فرق بالکل مختلف جواب دیتا ہے، مگر دوپہر فلوٹ سے زیادہ درست لگتا ہے.

مندرجہ ذیل مثال کے طور پر سی آر آر () میں کام کی مثال ہے:

شامل کریں

شامل کریں

انٹری مین () {

فلوٹ نوم 1 = sqrt (2382719676512365. 1230112312312312)؛

ڈبل نوم 2 = چوٹرو (2382719676512365. 1230112312312312)؛

printf ("٪ f n"، num1)؛

printf ("٪ f n"، num2)؛

getchar ()؛

}

یہ مندرجہ ذیل پیداوار فراہم کرتا ہے:

48813108. 000000

48813109. 678778

یہاں، آپ دیکھ سکتے ہیں کہ ڈبل میں جواب ایک بہتر صحت مند ہے.

سبھی سب سے بہتر ہے، دوہری فلٹنگ نقطہ ریاضی کے لئے استعمال کرنا بہتر ہے، کیونکہ ڈبل اور جدید کمپیوٹرز پر سی میں کام کرنے والے کئی معیاری ریاضی افعال ڈبل فلوٹنگ پوائنٹس کے حساب سے انتہائی تیز اور موثر ہیں. یہ فلاٹ استعمال کرنے کی ضرورت کو کم کرنے کی طرف جاتا ہے، جب تک کہ آپ کو بہت زیادہ پوائنٹس کی تعداد پر کام کرنے کی ضرورت نہیں ہے (اس تعداد میں ہزاروں کی تعداد میں ہزاروں کی بڑی گرفتاری کے بارے میں سوچیں) یا آپ ایسے نظام پر کام کررہے ہیں جو ڈبل - صحت سے متعلق فلوٹنگ نقطہ، بہت سے GPUs، کم طاقتور آلات اور بعض پلیٹ فارمز (آرم کورٹیکس-ایم 2، کورٹیکس -4 4 وغیرہ) ڈبل ابھی تک سپورٹ نہیں کرتے ہیں، پھر آپ کو فلوٹ کا استعمال کرنا چاہئے. اس کے علاوہ، یاد رکھنا ایک بات یہ ہے کہ بعض GPUs / CPUs فلوٹ پراسیسنگ میں بہتر / موثر کام کرتے ہیں جیسے ویکٹر / میٹرکس کی حساب سے، لہذا آپ کو ہارڈ ویئر کی تفصیلات دستی / دستاویزات کو بہتر فیصلہ کرنے کی ضرورت ہوسکتی ہے جس سے آپ کو استعمال کرنا چاہیے ایک خاص مشین کے لئے.

جدید ترین کمپیوٹرز کو ھدف کرنے والے کوڈ میں ڈبل کی بجائے فلاٹ کو استعمال کرنے میں کم از کم ایک وجہ موجود ہے. ڈبل میں اضافی صحت سے متعلق کمی کو کم کر دیتا ہے، لیکن ختم نہیں ہوتا، راؤنڈنگ کی غلطیاں یا دیگر خرابی کا امکان ہے جو اس پروگرام کے دیگر حصوں میں مشکلات پیدا کرسکتا ہے. بہت سے ریاضی افعال یا آپریٹرز ڈبل کو بدلتے ہیں اور واپسی کرتے ہیں، لہذا آپ کو فلوٹ میں نمبرز کاسٹ کرنے کی ضرورت نہیں ہے، کیونکہ اس کی صحت سے متعلق ہوسکتی ہے.فلوٹنگ نقطہ ریاضی کے بارے میں تفصیلی تجزیہ کے لئے، میں آپ کو یہ بہت اچھا مضمون (// دستاویزات. oracle com com / cd / e19957-01 / 806-3568 / ncg_goldberg.html) پڑھنے کے لئے انتہائی مشورہ دیتے ہیں.

خلاصہ

تو … ایک مختصر میں:

آپ کو فلاٹ استعمال کرنا چاہئے جہاں جگہ:

اگر آپ ہارڈویئر کو ہدف کر رہے ہیں جہاں ڈبل صحت سے متعلق ایک سے زیادہ صحت سے متعلق ہے.

آپ کی درخواست میں ہزاروں کی تعداد ہزاروں افراد کی طرح سچل پوائنٹ کی ریاضی کا بھاری استعمال ہوتا ہے.

آپ بہت کم سطح کی اصلاح کر رہے ہیں. مثال کے طور پر، آپ کو خصوصی سی پی یو ہدایات (آئی ایس، ایس ایس ایس، ایس ایس ایس 2، اے وی ایکس، وغیرہ) استعمال کر رہے ہیں جو ایک وقت میں کئی نمبروں / arrays / vectors پر کام کرتے ہیں.

  • اختتام
  • اس مضمون میں میں نے فلاٹ اور ڈبل کے درمیان فرق کو نمایاں کیا ہے، اور جس کو مخصوص جگہوں میں استعمال کیا جانا چاہئے. بالآخر، یہ زیادہ تر جگہوں پر دوہری جگہوں میں ڈبل استعمال کرنا بہتر ہے، خاص طور پر اگر آپ جدید کمپیوٹرز کو نشانہ بناتے ہیں، کیونکہ ڈبل فلوٹنگ پوائنٹ کی ریاضی کے استعمال کی وجہ سے کم کارکردگی کا امکان انتہائی امکان نہیں ہے. اگر آپ کے پاس کوئی سوال ہے تو، آپ ذیل میں تبصرہ سیکشن میں پوچھ سکتے ہیں!