আমি কেবল একটি প্রশ্ন পেয়েছি যা আমি উত্তর দিতে পারি না।
মনে করুন জাভাতে আপনার এই লুপ সংজ্ঞা রয়েছে:
while (i == i) ;
লুপটি যদি অসীম লুপ না হয় এবং প্রোগ্রামটি কেবল একটি থ্রেড ব্যবহার করে তবে এর প্রকার iএবং মান কী ?i
আমি কেবল একটি প্রশ্ন পেয়েছি যা আমি উত্তর দিতে পারি না।
মনে করুন জাভাতে আপনার এই লুপ সংজ্ঞা রয়েছে:
while (i == i) ;
লুপটি যদি অসীম লুপ না হয় এবং প্রোগ্রামটি কেবল একটি থ্রেড ব্যবহার করে তবে এর প্রকার iএবং মান কী ?i
উত্তর:
double i = Double.NaN;
Double.equals () এর জন্য API এর উত্তরটি বানান: "Double.NaN == Double.NaN এর মানটি মিথ্যা"। এটি " ভাসমান-পয়েন্টের ধরণ, ফর্ম্যাট এবং মানগুলি " এর অধীনে জাভা ভাষার বর্ণনায় উল্লেখ করা হয়েছে :
NaN, unordered তাই সংখ্যাসূচক তুলনা অপারেটরদের<,<=,>, এবং>=রিটার্নfalseযদি পারেন অথবা উভয় operands হয়NaN। সমতা অপারেটর==আয়falseপারেন প্রতীক হলেNaN, এবং বৈষম্য অপারেটর!=আয়trueযদি হয় প্রতীক হয়NaN। বিশেষ করে,x!=xহয়trueযদি এবং কেবল যদিxহয়NaN, এবং(x<y) == !(x>=y)হতে হবেfalseযদিxবাyহয়NaN।
x == xসর্বদা সত্য হওয়া উচিত। কিছু কেন নিজের সমান নয়?
null=nullশূন্য। NULL IS NULL1।
এর মান iতখন অবৈধ। "একটি নম্বর নয়"।
কিছু গুগল করার পরে, আমি জানতে পারি যে আপনার জাভাতে NaN (নম্বর নয়) থাকতে পারে! সুতরাং, একটি ফ্ল্যাট পয়েন্টিং নম্বর হ'ল ডেটা টাইপ এবং মান হয় এনএন। এখানে দেখুন
double i = Double.NaN;
NaN নিজেকে সহ কোনও কিছুর সমান নয়।
float i = Float.NaN;
while(i == i) ;
System.out.println("Not infinite!");
যেহেতু অন্যরা বলেছে এটি নাএন আমি অফিসিয়াল (জেডিকে 6) বাস্তবায়ন সম্পর্কে আগ্রহী হয়েছি Double.isNaNএবং দেখুন:
/**
* Returns <code>true</code> if the specified number is a
* Not-a-Number (NaN) value, <code>false</code> otherwise.
*
* @param v the value to be tested.
* @return <code>true</code> if the value of the argument is NaN;
* <code>false</code> otherwise.
*/
static public boolean isNaN(double v) {
return (v != v);
}
নানকে ব্যতিক্রমের সমতুল্য মনে করুন তবে একটি গণনার মধ্যে একটি যাদু মান ব্যবহার করে। যেহেতু একটি গণনা ব্যর্থ হয়েছে - যেমন একটি নেতিবাচক বর্গমূল, শূন্য ইত্যাদি দ্বারা ভাগ করা - এটি অন্য কোনও কিছুর সাথে তুলনা করার কোনও মানে হয় না। সর্বোপরি যদি শূন্য দ্বারা বিভক্ত হয় একটি নান এটি -2 এর বর্গমূলের বা -3 এর বর্গমূলের সমান?
ন্যান এমন একটি গণনা করার অনুমতি দেয় যা এমন একটি পদক্ষেপ অন্তর্ভুক্ত করে যা অতিরিক্ত ব্যতিক্রম প্রবর্তন না করে সম্পূর্ণরূপে একটি অবৈধ উত্তর প্রদান করে। উত্তরটি যাচাই করার জন্য ফ্লোট.আইএসএনএন () ও সমতুল্য হয়ে নন ন্যানডনেসের (কেবল এটিই যদি আমি ব্যাগ না করি তবেই এটি শব্দ) পরীক্ষার মান verify
আমি যোগ করতে হবে
float i = Float.NaN;
পাশাপাশি
double i = Double.NaN;
এই ধরণের প্রশ্নগুলির মধ্যে একটি সাধারণ কৌশল এটি আপনি যে অনুমান হিসাবে তৈরি করেন যে আমি একটি অন্তর্ভুক্ত in অন্যান্য সাধারণ অনুমানগুলি হ'ল স্ট্রিং, এক্স, ওয়াই একটি ডাবল, সিএইচ একটি চর, খ একটি বাইট ইত্যাদি you
অনুরূপ একটি প্রশ্ন হ'ল; এটি কখনই লুপ হয় না, 'এক্স' কী
while(x == x && x != x + 0) { }
আমার আরেকটি প্রশ্ন আমার বেশ পছন্দ; এই লুপটি একটি অসীম লুপ, এক্স এর সম্ভাব্য মানগুলি কী। (: আমি তাদের মধ্যে বারোটি গণনা করছি :)
while(x != 0 && x == -x) { }
আমি জানি এটি একটি জাভা প্রশ্ন, তবে অন্যান্য ভাষার জন্য প্রশ্নটি বিবেচনা করা আগ্রহজনক।
সি-তে, 'ইন' এর মতো একটি সাধারণ ধরণ 'মহাবিশ্বের শীতল হওয়ার আগে' আচরণটি প্রদর্শন করতে পারে যদি 'আমি'টিকে একটি অস্থির হিসাবে ঘোষণা করা হয় (সুতরাং সংকলক প্রতিটি পুনরাবৃত্তির জন্য দুটি' আই 'পড়তে বাধ্য হবে) এবং যদি 'আমি' আসলে স্মৃতিতে থাকি যেখানে অন্য কিছু এটি প্রভাবিত করতে পারে। তারপরে লুপটি শেষ হবে যখন একক পুনরাবৃত্তির দুটি পঠনের মধ্যে 'i' পরিবর্তন হয়েছিল। ( যুক্ত : একটি সম্ভাব্য জায়গা - একটি মাইক্রো কম্পিউটারে যেখানে 'i' আসলে একটি আই / ও পোর্টের ঠিকানায় অবস্থিত, সম্ভবত পজিশন সেন্সরের সাথে সংযুক্ত connected এটি 'আই' পয়েন্টার ভেরিয়েবল হলে আরও প্রশংসনীয় হবে) অস্থির স্মৃতিতে নির্দেশক) এবং বিবৃতিটি ছিল ' while (*i == *i);'।)
অন্যান্য উত্তরের দ্বারা প্রমাণিত হিসাবে, সি ++ এ, '==' অপারেটরটি যদি আমি একজন ব্যবহারকারী-সংজ্ঞায়িত শ্রেণীর হয় তবে ব্যবহারকারী দ্বারা সরবরাহ করা যেতে পারে, তাই যে কোনও কিছুই সম্ভব হতে পারে।
বরং এনএএন এর মতো, এসকিউএল-ভিত্তিক ভাষায়, লুপটি অসীম হবে না যদি আমার মান NULL হত; তবে, কোনও অ-নুল মান মান লুপটিকে অসীম করে তুলবে। এটি বরং জাওয়ার মতো, যেখানে কোনও সংখ্যা (এনএএন এর বিপরীতে) লুপটিকে অসীম করে তোলে।
কনস্ট্রাক্টটির কোনও ব্যবহারিক ব্যবহার হচ্ছে না দেখছি, তবে এটি একটি আকর্ষণীয় ট্রিভিয়া প্রশ্ন question
আমি এই সমাধানটি না দেখে অবাক হয়েছি:
while (sin(x) == sin(x)) //probably won't eval to true
একটি মন্তব্যের জবাবে, এটি চালানোর চেষ্টা করুন:
double x = 10.5f;
assert (x == asin(sin(x)));
এক্সকে তত্ত্বের ক্ষেত্রে সর্বদা আরকসিন (পাপ (এক্স)) সমান করা উচিত, তবে বাস্তবে এটি হয় না।
x, যা সঠিক একই ত্রুটি সহ সঠিক ফলাফল অর্জন করবে। আরকসিন ভাসমান পয়েন্ট সংখ্যার সাথে একটি পাপের ফলাফলকে বিপরীত করতে পারে না কারণ পাস করা মানটি asin()ঠিক সঠিক হবে না। অতএব, ফলাফল asin()ভুল হবে, x == asin(sin(x))মিথ্যা করা। এছাড়াও, আরকসিন অগত্যা পাপ ক্রিয়াকলাপটিকে "পূর্বাবস্থায়িত" করে না x পাপের ক্রিয়াকলাপ x এর একাধিক মানের জন্য একই ফল দিতে পারে, এজন্য asin()কেবল -π / 2 এবং π / 2 এর মধ্যে কেবল সংখ্যাগুলি পাওয়া যায়।
i == iপারমাণবিক নয়। যেমন প্রোগ্রাম দ্বারা প্রমাণিত:
static volatile boolean i = true;
public static void main(String[] args) throws InterruptedException
{
new Thread() {
@Override
public void run() {
while (true) {
i = !i;
}
}
}.start();
while (i == i) ;
System.out.println("Not atomic! i: " + i);
}
আপডেট এখানে অসীম লুপের আরও একটি উদাহরণ রয়েছে (কোনও নতুন থ্রেড তৈরি হয় না)।
public class NoNewThreads {
public static void main(String[] args) {
new NoNewThreads();
System.gc();
int i = 500;
System.out.println("Still Running");
while (i == i) ;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
Thread.sleep(1000);
System.exit(0);
}
}
while (i == i);কখনই চালায় না।