জাভাতে অনন্ত বাস্তবায়ন কীভাবে?


138

জাভাতে প্রতিটি সংখ্যাসূচক ডেটা টাইপের জন্য অনন্ত উপস্থাপন করার মতো কিছু আছে কি? কীভাবে এটি বাস্তবায়িত হয় যে আমি এটির সাথে গাণিতিক অপারেশন করতে পারি?

যেমন

int myInf = infinity; //However it is done
myInf + 5; //returns infinity
myInf*(-1); //returns negative infinity

আমি খুব বড় সংখ্যা ব্যবহার করার চেষ্টা করেছি, তবে আমি একটি সঠিক, সহজ সমাধান চাই।


10
এখানে অসীম সংখ্যার অসম্পূর্ণতা রয়েছে, আপনি কোনটিকে মডেল করতে চান?
ডেভ রিচার্ডসন

11
কেন ∞-∞==0সত্য হতে হবে? এবং এছাড়াও: আপনার এ জাতীয় জিনিস দরকার কেন?
ব্রিম্বরিয়াম

উত্তর:


190

double অনন্ত সমর্থন করে

double inf = Double.POSITIVE_INFINITY;
System.out.println(inf + 5);
System.out.println(inf - inf); // same as Double.NaN
System.out.println(inf * -1); // same as Double.NEGATIVE_INFINITY

কপি করে প্রিন্ট

Infinity
NaN
-Infinity

নোট: Infinity - Infinityনয় Not a Number


23
আমি floatযখনই সম্ভব এটি ব্যবহার এড়াচ্ছি কারণ এর যথার্থতা খুব খারাপ। ;)
পিটার ল্যারি

3
ডিজকস্ট্রার মতো অ্যালগরিদমগুলি প্রয়োগ করা আমাকে প্রশ্ন তৈরি করে POSITIVE_INFINITY <POSITIVE_INFINITY।
জোয়ে কারসন

41

আমি মনে করি আপনি কোনও কারণে পূর্ণসংখ্যার গণিত ব্যবহার করছেন। যদি তা হয় তবে Integerক্লাসের MAX_VALUE ক্ষেত্রটি ব্যবহার করে কার্যত কার্যত প্রায় POSITIVE_INFINITY এর সমান একটি ফলাফল পেতে পারেন :

Integer myInf = Integer.MAX_VALUE;

(এবং NEGATIVE_INFINITY এর জন্য আপনি MIN_VALUE ব্যবহার করতে পারেন)) অবশ্যই কিছু কার্যকরী পার্থক্য থাকবে, উদাহরণস্বরূপ, myInfMAX_VALUE হওয়ার সাথে মানটির তুলনা করার সময় : স্পষ্টত এই সংখ্যাটি কম নয় myInf

এখানে একটি লাইব্রেরি রয়েছে যাতে POSITIVE_INFINITY এবং NEGATIVE_INFINITY ক্ষেত্র রয়েছে তবে তারা MAX_VALUE এবং MIN_VALUE এর জন্য কেবল নতুন নাম।


11
পূর্ণসংখ্যা কত? MAX_VALUE + 5?
এরউইন স্মাউট

9
পূর্ণসংখ্যা MA পূর্ণসংখ্যার। MAX_VALUE + 5 = পূর্ণসংখ্যার। MIN_VALUE + 4 = -2147483644।
এরিক জি.হ্যাগস্ট্রোম

আপনি Integer.MAX_VALUEযেহেতু Double.POSITIVE_INFINITYবলেছেন যে তারা 'কার্যত প্রায় একই' তাই অনন্ত হিসাবে ব্যবহারের মধ্যে পার্থক্য কী, তবে পার্থক্য কী?
ahitt6345

1
@ অহিট 6345 Integer.MAX_VALUEএখনও সীমাবদ্ধ, এটি অনন্তের অনুকরণের জন্য এটি একটি হ্যাক। তদুপরি, Integer.MAX_VALUEকেবল 32-বিট যেখানে Double.POSITIVE_INFINITY64-বিট।
mgthomas99

1
পূর্ণসংখ্যা। MAX_VALUE একটি বৈধ সংখ্যা যা আপনার ইনপুটটিতে ব্যবহার করা যেতে পারে। অপটি অনন্তের জন্য জিজ্ঞাসা করলেন, যা কোনও সংখ্যা নয়, তবে গাণিতিক প্রতীক।
refaelio

11

ব্যবহার করতে Infinity, আপনি Doubleযা সমর্থন করতে পারেন তা ব্যবহার করতে পারেন Infinity: -

    System.out.println(Double.POSITIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY * -1);
    System.out.println(Double.NEGATIVE_INFINITY);

    System.out.println(Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY);

আউটপুট : -

Infinity
-Infinity
-Infinity

Infinity 
NaN

5

Doubleএবং Floatধরনের POSITIVE_INFINITYধ্রুবক।


@ user1753100: ডিফল্টরূপে নং নয়, তবে কয়েকটি লাইব্রেরি যেমন: jsज्ञान . org এটিকে দৃশ্যত প্রয়োগ করে।
টিউডর

1
এটি ডাবলস এবং ফ্লোটগুলিতে সীমাহীন মানগুলিকে সীমাবদ্ধ করার ক্ষেত্রে স্বেচ্ছাচারী বলে মনে হচ্ছে। তাদের সর্বোচ্চ মানগুলি পূর্ণসংখ্যার সর্বাধিক মানের চেয়ে অনন্তের কাছাকাছি, তবে খুব বেশি কাছাকাছি নয়।
প্যাট্রিক ব্রিনিচ-ল্যাংলোইস

3
@ প্যাট্রিকব্রিনিচ-ল্যাংলোইস ভাসমান পয়েন্টের ধরণের (যেমন ডাবল এবং ফ্লোট) সরাসরি অনন্ত প্রকাশ করতে সক্ষম (যেমন, একটি বিট প্যাটার্ন যার অর্থ 'অনন্ত' রয়েছে, যা টাইপের সর্বোচ্চ মান থেকে পৃথক)। পূর্ণসংখ্যার সাথে ডাবল এবং ফ্লোটের MAX_VALUE রয়েছে।
ডেভিড মরিস

7
"তাদের সর্বাধিক মানগুলি পূর্ণসংখ্যার সর্বাধিক মানের চেয়ে অনন্তের কাছাকাছি, তবে খুব বেশি কাছাকাছি নয়।" যে কোনও সীমাবদ্ধ নম্বর অনন্ত থেকে দূরে থাকে;)
carlsb3rg

4

আমি নিশ্চিত নই যে জাভাতে প্রতিটি সংখ্যাসূচক প্রকারের জন্য অসীমতা রয়েছে তবে কিছু সংখ্যক ডেটা টাইপের জন্য উত্তরটি ইতিবাচক:

Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY

অথবা

Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY

এছাড়াও আপনি নিম্নলিখিত নিবন্ধটি দরকারী খুঁজে পেতে পারেন যা +/- অনন্ত জড়িত কিছু গাণিতিক ক্রিয়াকে উপস্থাপন করে: জাভা ফ্লোটিং-পয়েন্ট নম্বর অন্তর্ভুক্তি


4

কেবলমাত্র ডাবল এবং ফ্লোট টাইপ সমর্থন POSITIVE_INFINITYধ্রুবক।


2

সংখ্যার মোড়ক প্রকারের জন্য।

যেমন Double.POSITVE_INFINITY

আশা করি এটি আপনাকে সাহায্য করতে পারে।


1
সমস্ত সংখ্যার মোড়ক ধরণের জন্য নয়। ডাবল অ্যান্ড ফ্লোটের জন্য
এরিক জি.হ্যাগস্ট্রোম

2

একটি জেনেরিক সমাধান হ'ল নতুন ধরণের প্রবর্তন। এটি আরও জড়িত থাকতে পারে তবে এর নিজস্ব ধরণের সংজ্ঞা না দেয় এমন কোনও ধরণের জন্য কাজ করার সুবিধা রয়েছে।

যদি Tএমন কোনও প্রকার হয় যার lteqজন্য সংজ্ঞায়িত করা হয় তবে আপনি এরকম কিছু InfiniteOr<T>দিয়ে সংজ্ঞা দিতে পারেন lteq:

class InfiniteOr with type parameter T:
    field the_T of type null-or-an-actual-T
    isInfinite()
        return this.the_T == null
    getFinite():
        assert(!isInfinite());
        return this.the_T
    lteq(that)
        if that.isInfinite()
            return true
        if this.isInfinite()
            return false
        return this.getFinite().lteq(that.getFinite())

আমি এটি যথাযথ জাভা সিনট্যাক্সে অনুবাদ করতে আপনার কাছে রেখে দেব। আমি আশা করি ধারণাগুলি পরিষ্কার হয়েছে; তবে আমাকে যেভাবেই হোক সেগুলি বানান করতে দিন।

ধারণাটি হ'ল একটি নতুন ধরণের তৈরি করা যা ইতিমধ্যে কিছু বিদ্যমান ধরণের মতো একই মান রয়েছে, আরও একটি বিশেষ মান যা আপনি সর্বজনীন পদ্ধতির মাধ্যমে বলতে পারবেন - আপনি যেভাবে অনন্তকে অভিনয় করতে চান ঠিক তেমন কাজ করে, উদাহরণস্বরূপ এটি এর চেয়েও বড় আর কিছু. আমি nullএখানে অসীম প্রতিনিধিত্ব করতে ব্যবহার করছি , যেহেতু এটি জাভাতে সবচেয়ে সোজা মনে হয়।

আপনি যদি গাণিতিক ক্রিয়াকলাপগুলি যুক্ত করতে চান তবে তাদের কী করা উচিত তা সিদ্ধান্ত নিন, তারপরে এটি বাস্তবায়ন করুন। আপনি যদি অসীম কেসগুলি প্রথমে পরিচালনা করেন তবে এটি সম্ভবত সবচেয়ে সহজ তবে মূল ধরণের সীমাবদ্ধ মানগুলির উপর বিদ্যমান ক্রিয়াকলাপগুলি পুনরায় ব্যবহার করুন।

ডান হাতের পাশের অসম্পূর্ণতাগুলির বিপরীতে বা তদ্বিপরীত হওয়ার আগে বাম-হাতের অসম্পূর্ণতাগুলি পরিচালনা করার একটি কনভেনশন গ্রহণ করা সুবিধাজনক হবে বা নাও হতে পারে; আমি এটি চেষ্টা না করে বলতে পারি না, তবে কম বা সম-সমান ( lteq) এর জন্য প্রথমে ডান-হাতের অসীম দিকে তাকানো সহজ বলে মনে করি। আমি নোট করি যে lteqপরিবর্তনমূলক নয় , addএবং এবং mulহয়; সম্ভবত এটি প্রাসঙ্গিক।

দ্রষ্টব্য: অসীম মানগুলিতে কী হওয়া উচিত তার একটি ভাল সংজ্ঞা নিয়ে আসা সর্বদা সহজ নয়। এটি তুলনা, সংযোজন এবং গুণনের জন্য, তবে সম্ভবত বিয়োগফল নয়। এছাড়াও, অসীম কার্ডিনাল এবং অর্ডিনাল সংখ্যার মধ্যে একটি পার্থক্য রয়েছে যা আপনি মনোযোগ দিতে চাইতে পারেন।


অতিরিক্ত রাজ্যের প্রতিনিধিত্ব করতে অতিরিক্ত এনাম ক্ষেত্রটি ব্যবহার করা সার্থক হতে পারে, তাই আপনার নেতিবাচক ইনফিনিটিও থাকতে পারে যা প্রায়শই কাম্য হয় এবং -(yourvalue)সঠিকভাবে কাজ করে। এবং এটি আপনাকে NaN (সংখ্যা নয়) ধারণাটি সমর্থন করার অনুমতি দেয় । তা ছাড়া, অবিচ্ছেদ্য ধরণের শীর্ষে বিশেষ মান যুক্ত করা ভাল ধারণা হতে পারে, বিশেষত যখন অ্যাপ্লিকেশনটি ভাসমান পয়েন্ট সংখ্যা দ্বারা লঙ্ঘিত শব্দার্থক প্রয়োজন।
blubberdiblub

0

যেহেতু ক্লাস নম্বর চূড়ান্ত নয়, এখানে একটি ধারণা, আমি অন্যান্য পোস্টে এখনও খুঁজে পাই না। যথা ক্লাস নম্বর সাবক্লাস করার জন্য।

এটি একরকম কোনও অবজেক্ট সরবরাহ করবে যা পূর্ণসংখ্যা, লং, ডাবল, ফ্লোট, বিগইন্টিজার এবং বিগডিসিমালের জন্য অনন্ত হিসাবে বিবেচিত হতে পারে।

যেহেতু কেবল দুটি মান রয়েছে তাই আমরা একক প্যাটার্নটি ব্যবহার করতে পারি:

public final class Infinity extends Number {
    public final static Infinity POSITIVE = new Infinity(false);
    public final static Infinity NEGATIVE = new Infinity(true);
    private boolean negative;
    private Infinity(boolean n) {
        negative = n;
    }
}

কোনওভাবে আমি মনে করি বাকী পদ্ধতিগুলি ইনটাল্যু (), লংভ্যালু () ইত্যাদি then যাতে পরবর্তী সতর্কতা ছাড়াই অনন্ত মান ব্যবহার করা যায় না।


0

আমি জাভাতে একজন শিক্ষানবিস ... আমি জাভা ডকুমেন্টেশনে, booleanএবং doubleপ্রকারের জন্য অনন্তের জন্য আরও একটি বাস্তবায়ন পেয়েছি । https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3

ধনাত্মক শূন্য এবং নেতিবাচক শূন্য সমান তুলনা; সুতরাং এক্সপ্রেশন 0.0 == - 0.0 এর ফলাফল সত্য এবং 0.0> -0.0 এর ফলাফল মিথ্যা। তবে অন্যান্য ক্রিয়াকলাপগুলি ইতিবাচক এবং নেতিবাচক শূন্যকে আলাদা করতে পারে; উদাহরণস্বরূপ, 1.0 / 0.0 এর মান ধনাত্মক অনন্ত রয়েছে, তবে 1.0 / -0.0 এর মান negativeণাত্মক অসীম।

এটি দেখতে কুৎসিত দেখাচ্ছে, কিন্তু এটি কাজ করে।

public class Main {

    public static void main(String[] args) {
        System.out.println(1.0/0.0);
        System.out.println(-1.0/0.0);
    }

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