জাভা বড় সংখ্যা


95

আমি জাভাতে খুব বড় সংখ্যার সাথে গণনা করা কীভাবে করব?

আমি চেষ্টা করেছি longকিন্তু এটি 9223372036854775807 এ সর্বাধিক পেরিয়ে গেছে এবং একটি পূর্ণসংখ্যার ব্যবহার করার সময় এটি পর্যাপ্ত অঙ্কগুলি সংরক্ষণ করে না এবং তাই আমার যা প্রয়োজন তার জন্য যথেষ্ট সঠিক নয়।

এদিক ওদিক কি আছে?


4
9223372036854775807Long.MAX_VALUEযাইহোক, এর সঠিক মান ।
জিন কোওন

উত্তর:


154

আপনি BigIntegerপূর্ণসংখ্যার BigDecimalজন্য এবং দশমিক সংখ্যা সহ সংখ্যার জন্য ক্লাসটি ব্যবহার করতে পারেন । উভয় ক্লাস java.mathপ্যাকেজ সংজ্ঞায়িত করা হয় ।

উদাহরণ:

BigInteger reallyBig = new BigInteger("1234567890123456890");
BigInteger notSoBig = new BigInteger("2743561234");
reallyBig = reallyBig.add(notSoBig);

8
আপনি যদি এটির সাথে গণনা করার পরিকল্পনা করেন তবে বিগইন্টিজার শ্রেণীর ব্যবহার দ্বারা পরিচালিত পারফরম্যান্সের উত্তরাধিকারী (যদিও এটি বেশিরভাগের কাছে স্পষ্ট মনে হয়) উত্তরাধিকার সূত্রে উল্লেখযোগ্য হতে পারে।
হাইলেম

@ হাইলেম পারফরম্যান্সের গতি একই তবে সংখ্যার দৈর্ঘ্য এটি সময় নিতে পারে। তারা গণনা করতে বিটওয়াইস অপারেটর ব্যবহার করে। আদিম ধরণের সাথে গণিত করার সময় সাধারণত যা ঘটে তা পছন্দ করুন।
এবুউবেকার


18

এখানে একটি উদাহরণ যা খুব দ্রুত বড় সংখ্যা পায়।

import java.math.BigInteger;

/*
250000th fib # is: 36356117010939561826426 .... 10243516470957309231046875
Time to compute: 3.5 seconds.
1000000th fib # is: 1953282128707757731632 .... 93411568996526838242546875
Time to compute: 58.1 seconds.
*/
public class Main {
    public static void main(String... args) {
        int place = args.length > 0 ? Integer.parseInt(args[0]) : 250 * 1000;
        long start = System.nanoTime();
        BigInteger fibNumber = fib(place);
        long time = System.nanoTime() - start;

        System.out.println(place + "th fib # is: " + fibNumber);
        System.out.printf("Time to compute: %5.1f seconds.%n", time / 1.0e9);
    }

    private static BigInteger fib(int place) {
        BigInteger a = new BigInteger("0");
        BigInteger b = new BigInteger("1");
        while (place-- > 1) {
            BigInteger t = b;
            b = a.add(b);
            a = t;
        }
        return b;
    }
}

4
সত্যিই বড় ফিবোনাচি সংখ্যার জন্য, পুনরাবৃত্তির গণনা হাস্যকরভাবে সময় সাপেক্ষ is বিনেটের সুস্পষ্ট সূত্রটি ব্যবহার করা আরও ভাল । কয়েক ম্যাথ.পা (গুলি) এবং ম্যাথ.এসকিআরটি () পরে, আপনি শেষ করেছেন! :)
জুবিন মুখার্জি

4
@ জুবিনমুকার্জি তবে বিগডিসিমালে পাও এবং স্কয়ার্ট সস্তা নয়। এটি পুনরাবৃত্তির চেয়ে ভাল তবে এটি যতটা শোনাচ্ছে তত সহজ নয়।
পিটার লরি


6
import java.math.BigInteger;
import java.util.*;
class A
{
    public static void main(String args[])
    {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter The First Number= ");
        String a=in.next();
        System.out.print("Enter The Second Number= ");
        String b=in.next();

        BigInteger obj=new BigInteger(a);
        BigInteger obj1=new BigInteger(b);
        System.out.println("Sum="+obj.add(obj1));
    }
}

3

আপনি যা করছেন তার উপর নির্ভর করে আপনি GMP (gmplib.org) যা একটি উচ্চ-পারফরম্যান্স মাল্টি-প্রিসিশন লাইব্রেরি তা একবার দেখে নিতে পছন্দ করতে পারেন। জাভাতে এটি ব্যবহার করতে আপনাকে বাইনারি লাইব্রেরির চারপাশে জেএনআই মোড়ক দেওয়া দরকার।

বিবিআইন্টেগারের পরিবর্তে পাইটিকে নির্বিচারে সংখ্যার জন্য গণনা করার জন্য এটি ব্যবহারের উদাহরণের জন্য অ্যালিয়থ শ্যুটআউট কোডের কয়েকটি দেখুন।

https://benchmarkgame-team.pages.debian.net/benchmarkgame/program/pidigits-java-2.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.