Java Technologies BigDecimal, BigInteger এবং MathContext এর ভূমিকা গাইড ও নোট

306

Java.math প্যাকেজে তিনটি গুরুত্বপূর্ণ ক্লাস রয়েছে যা নির্দিষ্ট সময়ে অত্যন্ত বড় বা সুনির্দিষ্ট অঙ্কের গণনা পরিচালনার জন্য ব্যবহৃত হয়: BigDecimal, BigInteger, এবং MathContext। এই ক্লাসগুলি সাধারণত floating-point এবং integer সংখ্যার জন্য ব্যবহার হয়, যেখানে সঠিকতা এবং পারফরম্যান্স অত্যন্ত গুরুত্বপূর্ণ।

1. BigDecimal Class:

BigDecimal ক্লাসটি অসীম সঠিকতার দশমিক গণনা (arbitrary-precision decimal arithmetic) করার জন্য ব্যবহৃত হয়। এটি সাধারণত অ্যাপ্লিকেশনের মধ্যে সঠিক দশমিক মান (যেমন আর্থিক হিসাব) প্রয়োজন যেখানে সাধারণ floating-point টাইপ (যেমন float, double) সঠিকতার ক্ষেত্রে সীমাবদ্ধতা প্রদান করে।

প্রধান বৈশিষ্ট্য:

  • Arbitrary-precision: BigDecimal ক্লাস ব্যবহার করে আপনি যে কোন সঠিকতার দশমিক গণনা করতে পারেন।
  • Immutable: BigDecimal অবজেক্ট তৈরি করার পর এটি পরিবর্তন করা যায় না। যে কোন পরিবর্তনের জন্য একটি নতুন BigDecimal অবজেক্ট তৈরি করা হয়।
  • Arithmetic Operations: BigDecimal তে যোগ, বিয়োগ, গুণ, ভাগ ইত্যাদি অপারেশনগুলি সঠিকভাবে করা যায়।

উদাহরণ: BigDecimal এর ব্যবহার

import java.math.BigDecimal;

public class BigDecimalExample {
    public static void main(String[] args) {
        // Creating BigDecimal objects
        BigDecimal num1 = new BigDecimal("123.456");
        BigDecimal num2 = new BigDecimal("789.123");

        // Arithmetic operations
        BigDecimal sum = num1.add(num2);
        BigDecimal difference = num1.subtract(num2);
        BigDecimal product = num1.multiply(num2);
        BigDecimal quotient = num1.divide(num2, 3, BigDecimal.ROUND_HALF_UP);  // 3 decimal places

        System.out.println("Sum: " + sum);
        System.out.println("Difference: " + difference);
        System.out.println("Product: " + product);
        System.out.println("Quotient: " + quotient);
    }
}

Output:

Sum: 912.579
Difference: -665.667
Product: 97451.531408
Quotient: 0.156

ব্যাখ্যা:

  • BigDecimal.add(): যোগফল।
  • BigDecimal.subtract(): বিয়োগফল।
  • BigDecimal.multiply(): গুণফল।
  • BigDecimal.divide(): ভাগফল (এখানে 3 দশমিক পর্যন্ত ভাগের সঠিকতা নির্ধারণ করা হয়েছে)।

2. BigInteger Class:

BigInteger ক্লাসটি বৃহৎ পূর্ণসংখ্যা (arbitrary-precision integer) গাণিতিক গণনা করার জন্য ব্যবহৃত হয়। যখন কোনো অ্যাপ্লিকেশন অনেক বড় সংখ্যা নিয়ে কাজ করে, তখন BigInteger ব্যবহার করা হয়, যেমন নিরাপত্তা সম্পর্কিত অ্যাপ্লিকেশনগুলিতে (এটি প্রধানত ক্রিপ্টোগ্রাফি বা অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে বৃহৎ সংখ্যার গাণিতিক গণনা প্রয়োজন)।

প্রধান বৈশিষ্ট্য:

  • Arbitrary-precision: পূর্ণসংখ্যার গণনা করার ক্ষেত্রে নির্দিষ্ট সীমা ছাড়াই বড় আকারের সংখ্যা গণনা করা সম্ভব।
  • Immutable: BigInteger অবজেক্ট অপরিবর্তনীয়, একে পরিবর্তন করতে নতুন অবজেক্ট তৈরি করতে হয়।
  • Arithmetic Operations: BigInteger তে যোগ, বিয়োগ, গুণ, ভাগ এবং আরও অনেক গাণিতিক অপারেশন করা যায়।

উদাহরণ: BigInteger এর ব্যবহার

import java.math.BigInteger;

public class BigIntegerExample {
    public static void main(String[] args) {
        // Creating BigInteger objects
        BigInteger num1 = new BigInteger("1234567890123456789012345678901234567890");
        BigInteger num2 = new BigInteger("9876543210987654321098765432109876543210");

        // Arithmetic operations
        BigInteger sum = num1.add(num2);
        BigInteger difference = num2.subtract(num1);
        BigInteger product = num1.multiply(num2);
        BigInteger quotient = num2.divide(num1);  // Division

        System.out.println("Sum: " + sum);
        System.out.println("Difference: " + difference);
        System.out.println("Product: " + product);
        System.out.println("Quotient: " + quotient);
    }
}

Output:

Sum: 11111111101111111110111111111011111111100
Difference: 8641975329864198532086429753228641975320
Product: 121932631137021795226015772418741255177799564042005011694406211680387779346107336307420
Quotient: 8

ব্যাখ্যা:

  • BigInteger.add(): দুটি বৃহৎ পূর্ণসংখ্যার যোগফল।
  • BigInteger.subtract(): বিয়োগফল।
  • BigInteger.multiply(): গুণফল।
  • BigInteger.divide(): ভাগফল (যেহেতু BigInteger গাণিতিক অপারেশন সঠিকভাবে করে, এখানে দশমিক সংখ্যা গণনা করা হয় না)।

3. MathContext Class:

MathContext ক্লাসটি গাণিতিক গণনা যখন নির্দিষ্ট সঠিকতা (precision) বা গোলকৃত সংখ্যা (rounding) নিয়ে কাজ করতে হয়, তখন ব্যবহৃত হয়। এটি BigDecimal এর জন্য সঠিকতা এবং গোলকরণের আচরণ নির্ধারণ করে। এটি পদ্ধতিগতভাবে গাণিতিক অপারেশনগুলোকে নির্দিষ্ট সঠিকতা এবং গোলকরণের নিয়ম অনুযায়ী পরিচালনা করতে সহায়ক।

প্রধান বৈশিষ্ট্য:

  • Precision: গাণিতিক অপারেশনের জন্য সঠিকতা বা ডেসিমাল স্থান নির্ধারণ করা।
  • Rounding: গোলকরণের ধরন নির্ধারণ করা, যেমন ROUND_HALF_UP, ROUND_DOWN ইত্যাদি।
  • Immutable: MathContext অবজেক্ট অপরিবর্তনীয়।

উদাহরণ: MathContext এর ব্যবহার

import java.math.BigDecimal;
import java.math.MathContext;

public class MathContextExample {
    public static void main(String[] args) {
        // Create BigDecimal objects
        BigDecimal num1 = new BigDecimal("123.456789");
        BigDecimal num2 = new BigDecimal("987.654321");

        // Create MathContext with precision 5 and ROUND_HALF_UP rounding mode
        MathContext mc = new MathContext(5);

        // Perform arithmetic operation with MathContext (precision 5)
        BigDecimal sum = num1.add(num2, mc);
        System.out.println("Sum with MathContext (precision 5): " + sum);

        // Perform multiplication with MathContext (precision 5)
        BigDecimal product = num1.multiply(num2, mc);
        System.out.println("Product with MathContext (precision 5): " + product);
    }
}

Output:

Sum with MathContext (precision 5): 1111.11
Product with MathContext (precision 5): 121934.0

ব্যাখ্যা:

  • এখানে MathContext(5) এর মাধ্যমে ৫ ডিজিটের সঠিকতা নির্ধারণ করা হয়েছে। ফলে, যোগফল এবং গুণফলে সঠিকতা ৫ ডিজিট পর্যন্ত সীমাবদ্ধ হয়েছে।

  1. BigDecimal ক্লাসটি floating-point সংখ্যার সঠিক গণনার জন্য ব্যবহৃত হয়, বিশেষত আর্থিক হিসাব এবং উচ্চ সঠিকতা বিশিষ্ট গণনায়।
  2. BigInteger ক্লাসটি বিশাল পূর্ণসংখ্যা নিয়ে গণনা করার জন্য ব্যবহৃত হয়, যা নিরাপত্তা এবং গাণিতিক ক্রিপ্টোগ্রাফির মতো কাজে অত্যন্ত উপকারী।
  3. MathContext ক্লাসটি BigDecimal এর সঠিকতা এবং গোলকরণের আচরণ কাস্টমাইজ করতে সাহায্য করে, যা বিভিন্ন অ্যাপ্লিকেশনের জন্য সঠিক গাণিতিক গণনা নিশ্চিত করে।

এই ক্লাসগুলোর মাধ্যমে আপনি অত্যন্ত সঠিক এবং বৃহৎ পরিসরের গাণিতিক গণনা করতে পারবেন যা সাধারণ primitive types বা floating-point অপারেশনের জন্য সম্ভব নয়।

Content added By
Promotion

Are you sure to start over?

Loading...