مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

آموزش کار با اعداد بسیار بزرگ در جاوا به زبان ساده

چگونه با اعداد بسیار بزرگ در جاوا کار کنیم؟ همان طور که در مطلب انواع داده ها در جاوا گفته شد انواع عددی دارای محدودیتی می باشد. شاید حالتی پیش بیاید که مجبور شویم با داده های بسیار بزرگ کار کنیم به طوری که انواع داده های موجود پاسخگوی نیازمان نباشند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

در دوره آموزش جاوا ( آموزش برنامه نویسی جاوا ) این موارد بصورت رایگان آموزش داده شده است

اگر اندازه های داده ها به قدری باشد که مثلا نوع داده int نتواند داده ما را ذخیره کند و حتی نوع داده long نیز نتواند این کار را بکند باید فکر دیگری به حال ذخیره و کار با داده ها کرد. زبان جاوا برای حل این مشکل دو کلاس معرفی کرده است که بتوان انواع داده بزرگ را در آن ذخیره کرد. یکی برای داده های صحیح با نام BigInteger و دیگری برای ذخیره داده های اعشاری با نام BigDecimal . در کد زیر یک مثال از استفاده از این کلاس ها آورده شده است:

import java.math.BigInteger;
public class MyClass {
    public static void main(String[] args){
	 BigInteger integer=BigInteger.valueOf(500);
        for (int i=0;i<50;i++)
            integer=integer.multiply(BigInteger.valueOf(500));
        System.out.println(integer);

    }
}

خروجی کد بالا به شکل زیر خواهد بود:

444089209850062616169452667236328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

از کد دیده می شود که با این که عدد 500 به توان 50 یک عدد بسیار بزرگ است ولی می توان نتیجه را ذخیره کرد. اما از طرف دیگر این کلاس محدودیت هایی دارد. یکی از محدودیت های این کلاس این است که نمی توان با استفاده از علامت = شئ آن را مقداردهی کرد و باید مقداردهی آن با استفاده از متد valueOf انجام گردد و همچنین برای اعمال ریاضی اصلی +-/ نمی توان از علائم گفته شده استفاده کرد و باید از متدهای مربوطه مانند add, multiply استفاده کرد.

نحوه پیاده سازی این کلاس ها به این شکل است که برای ذخیره اعداد بزرگ از یک آرایه استفاده می شود که در هر خانه یک عدد قرار می گیرد و سقف ذخیره سازی این کلاس ها بزرگتری مقدار نوع داده int یعنی بزرگترین عدد 2147483647رقمی خواهد بود که مقدار بزرگی است. نکته ای که باید به آن اشاره کرد این است که برخلاف زبان قدرتمند سی پلاس پلاس که می شود در آن عملگرهایی مانند+ - را overload کرد در جاوا این امکان وجود ندارد و مجبوریم که برای کلاس هایی مانند BigInteger از متدهای مربوطه استفاده کنیم.


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات