টাইপফোন এনএন কেন 'নম্বর' দেয়?


166

শুধু আউট কৌতুহল.

এটি typeof NaNসংখ্যাটি খুব যৌক্তিক বলে মনে হয় না । ঠিক যেমন NaN === NaNবা NaN == NaNমিথ্যা প্রত্যাবর্তন, উপায় দ্বারা। এটি কি জাভাস্ক্রিপ্টের বিশেষত্বগুলির মধ্যে একটি, বা এর কোনও কারণ থাকবে?

সম্পাদনা করুন: আপনার উত্তরের জন্য ধন্যবাদ। যদিও এদিকে মাথা ঘুরিয়ে নেওয়া সহজ জিনিস নয়। উত্তর এবং উইকি পড়ার পরে আমি আরও বুঝতে পেরেছি, তবুও একটি বাক্য পছন্দ করেছে

নিজের সাথে তুলনা করার পরেও কোনও এনএএন এর সাথে তুলনা সর্বদা একটি অযৌক্তিক ফলাফল দেয়। তুলনা পূর্বাভাসগুলি হয় সিগন্যাল বা অ-সিগন্যালিং, সংকেত সংস্করণগুলি এই জাতীয় তুলনাগুলির জন্য একটি অবৈধ ব্যতিক্রমের সংকেত দেয়। সমতা এবং বৈষম্যের পূর্বাভাসগুলি অ-সংকেতযুক্ত তাই x = x প্রত্যাবর্তন মিথ্যা যদি এক্স একটি শান্ত এনএন হয় তা পরীক্ষার জন্য ব্যবহার করা যেতে পারে।

শুধু আমার মাথা ঘুরিয়ে রাখা। যদি কেউ এটিকে মানব ভাষায় (গণিতবিদের বিপরীতে, বলার মতো) পাঠযোগ্য ভাষায় অনুবাদ করতে পারে তবে আমি কৃতজ্ঞ would


17
+1: "নাএন একটি সংখ্যা তবে একটি সংখ্যা নয় Hum হুম ... কি?!"

11
অতিরিক্ত মজাদার জন্য; (NaN! == NaN) == সত্য
অ্যালেক্স কে।

1
আরও মজাদার (তবে এটি ভাবতে আসার পরেও, এটি একটি বুলিয়ান দেয়): isNaN (parseInt ('nodice')) === isNaN (parseInt ('someOथरNaN')) === সত্য;
KooiInc

1
JQuery ব্যবহার করা হলে, আমি isNumericপ্রকারটি পরীক্ষা করার চেয়ে বেশি পছন্দ করি : $.isNumeric(NaN); মিথ্যা প্রত্যাবর্তন করে, যেখানে $.type(NaN);নম্বর দেয় returns api.jquery.com/jQuery.is সংখ্যাসূচক
জাস্টিন

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

উত্তর:


53

এর অর্থ নোট এ নম্বর। এটি জাভাস্ক্রিপ্টের বিশেষত্ব নয়, সাধারণ কম্পিউটার বিজ্ঞানের নীতি।

Http://en.wikedia.org/wiki/NaN থেকে :

তিন ধরণের অপারেশন রয়েছে যা এনএএন ফিরে আসে:

কমপক্ষে একটি অপরেন্ড হিসাবে একটি NaN দিয়ে অপারেশন

নির্ধারিত ফর্ম

  • বিভাগগুলি 0/0, ∞ / ∞, ∞ / −∞, −∞ / ∞, এবং −∞ / −∞
  • গুণমান 0 × ∞ এবং 0 × −∞ −∞
  • শক্তি 1 ∞ ∞
  • সংযোজনগুলি ∞ + (−∞), (−∞) + ∞ এবং সমতুল্য বিয়োগফল।

জটিল ফলাফল সহ বাস্তব অপারেশন:

  • Aণাত্মক সংখ্যার বর্গমূল
  • Aণাত্মক সংখ্যার লগারিদম
  • 90 ডিগ্রি (বা π / 2 রেডিয়ান) এর বিজোড় একাধিকের স্পর্শক
  • কোনও সংখ্যার বিপরীত সাইন বা কোসাইন যা −1 এর চেয়ে কম বা +1 এর চেয়ে বড়।

এই সমস্ত মান এক নাও হতে পারে। একটি NaN এর জন্য একটি সহজ পরীক্ষাটি পরীক্ষা value == valueকরা মিথ্যা।


46
একটি এমনকি সহজ পরীক্ষা হ'লisNaN(value)
Alsciende

4
@ অ্যালসিএন্ডে এটি সমতুল্য নয়। isNaN(undefined)ফিরে আসে true, কিন্তু undefined == undefinedসত্য। একই ব্যতীত অন্যান্য সমস্ত অ-সংখ্যা প্রকারের জন্য যায় null
অ্যান্ডি

7
অন্য কথায়, সত্যিই value !== valueযদি পরীক্ষার সবচেয়ে সংক্ষিপ্ততম উপায় হয় । valueNaN
অ্যান্ডি

1
দেখে মনে হচ্ছে আপনি ঠিক আছেন, অ্যান্ডি। এখন এটি একটি অদ্ভুততা।
Alsciende

2
"এই মানগুলি একই হতে পারে না" এই বাক্যটির কোনও অর্থ নেই, কারণ এই মানগুলি অস্তিত্ব রাখে না।
দিমিত্রি জইতসেভ

103

ঠিক আছে, NaNএটি এখনও একটি সংখ্যাসূচক প্রকারের সত্ত্বেও এটি প্রকৃতপক্ষে নং-এ-নম্বর :-)

NaNকেবলমাত্র অর্থ নির্দিষ্ট সংখ্যাটির সীমাবদ্ধতার মধ্যে নির্দিষ্ট মানটি উপস্থাপন করা যায় না (যদিও এটি এমন সমস্ত সংখ্যার জন্য বলা যেতে পারে যা ফিট করতে হবে তবে NaNএটি একটি বিশেষ ক্ষেত্রে)।

একটি নির্দিষ্টটিকে NaNঅন্যের সমান হিসাবে বিবেচনা করা হয় না NaNকারণ এগুলি বিভিন্ন মান হতে পারে। তবে, NaNএখনও 2715 বা 31415 এর মতো একটি সংখ্যার প্রকার।


সাধারণ ব্যক্তির শর্তাবলী ব্যাখ্যা করতে আপনার আপডেট হওয়া প্রশ্ন হিসাবে:

নিজের সাথে তুলনা করার পরেও কোনও এনএএন এর সাথে তুলনা সর্বদা একটি অযৌক্তিক ফলাফল দেয়। তুলনা পূর্বাভাসগুলি হয় সিগন্যাল বা অ-সিগন্যালিং, সংকেত সংস্করণগুলি এই জাতীয় তুলনাগুলির জন্য একটি অবৈধ ব্যতিক্রমের সংকেত দেয়। সমতা এবং বৈষম্যের পূর্বাভাসগুলি অ-সংকেতযুক্ত তাই x = x প্রত্যাবর্তন মিথ্যা যদি এক্স একটি শান্ত এনএন হয় তা পরীক্ষার জন্য ব্যবহার করা যেতে পারে।

এই সমস্ত অর্থ হ'ল (অংশে বিভক্ত):

নিজের সাথে তুলনা করার পরেও কোনও এনএএন এর সাথে তুলনা সর্বদা একটি অযৌক্তিক ফলাফল দেয়।

মূলত, একটি NaNঅন্য সহ অন্য কোনও সংখ্যার সমান নয় NaNএবং এমনকি নিজেকে অন্তর্ভুক্ত করে

তুলনা পূর্বাভাসগুলি হয় সিগন্যাল বা অ-সিগন্যালিং, সংকেত সংস্করণগুলি এই জাতীয় তুলনাগুলির জন্য একটি অবৈধ ব্যতিক্রমের সংকেত দেয়।

একটি NaNএবং অন্য সংখ্যার মধ্যে তুলনা (কম, এর চেয়ে কম এবং আরও কিছু) অপারেশন করার ফলে একটি ব্যতিক্রম ছোঁড়া (সিগন্যালিং) বা ফলাফল হিসাবে কেবল মিথ্যা হয়ে উঠতে পারে (অ-সিগন্যালিং বা শান্ত)।

সমতা এবং বৈষম্যের পূর্বাভাসগুলি অ-সংকেতযুক্ত তাই x = x প্রত্যাবর্তন মিথ্যা যদি এক্স একটি শান্ত এনএন হয় তা পরীক্ষার জন্য ব্যবহার করা যেতে পারে।

সমতার জন্য পরীক্ষা (সমান, সমান নয়) কখনই সংকেত দেয় না তাই এগুলি ব্যবহার করা ব্যতিক্রম ঘটায় না। আপনার যদি নিয়মিত নম্বর থাকে xতবে x == xসর্বদা সত্য হবে। যদি xএটি হয় NaNতবে x == xসর্বদা মিথ্যা হবে। এটি আপনাকে NaNসহজে সনাক্ত করার একটি উপায় দিচ্ছে (নিঃশব্দে)।


1
ভাল ব্যাখ্যা, যদিও আমি শেষ দুটি বাক্যে একমত নই: এক্স কোনও এনএন কিনা তা যাচাই করার আরও ভাল উপায় isNaN () ফাংশন ব্যবহার করছে
কার্লোস বার্সেলোনা

@ ডমিনিক রডজার আমি এখানে এটি সম্পর্কে কীভাবে চিন্তা করি: এর typeof a === 'number'অর্থ "এআইইইই 754 ফ্ল্যাট হিসাবে অভ্যন্তরীণভাবে সংরক্ষণ করা আছে"
অ্যান্ডি

যদি বিভিন্ন মান দ্বারা উত্পাদিত করা যায় তবে কেন Infinity === Infinityফেরত আসবে : 1.0 / 0.0 বা 2.0 / 0.0? trueInfinity
হাশেম কুলামি

1
@ হাশেম, সম্ভবত তারা একই অনন্ত হিসাবে বিবেচিত হওয়ার কারণ সম্ভবত। বিভাগকে পুনরাবৃত্তি বিয়োগ হিসাবে বিবেচনা করে, আপনি দুটি বা এক থেকে শুরু করেন কিনা তা কোনও পার্থক্য করে না, এটি শূন্যে পৌঁছানোর জন্য প্রয়োজনীয় পদক্ষেপগুলির (বা আরও নির্ভুলভাবে, সঠিকভাবে পৌঁছাতে পারে না ) একই সংখ্যা । আমি বুঝতে গণিত গুরু কি আছে অনন্ত বিভিন্ন শ্রেণীর কিন্তু (1) আমি সন্দেহ 1/0এবং 2/0একই শ্রেণীতে এবং (2) সেখানে IEEE754 মধ্যে অনন্ত মাত্র এক শ্রেণী (ছাড়া অন্য রয়েছে রাখা +/-অবশ্যই)।
paxdiablo

1
আমি এই ব্যতিক্রমী "আসল সংখ্যাগুলি" কোনও অর্থবহ উপায়ে সংজ্ঞায়িত করার কোনও উপায় সম্পর্কে অবগত নই। গণিতে লগ এবং নেতিবাচক মূলগুলি কেবল জটিল সংখ্যায় বাস্তবের সম্প্রসারণের মাধ্যমেই পাওয়া যায়, যেখানে তারা একাধিক মানকে মূল্যায়ন করে 0/0এবং কোনও অর্থবহ উপায়ে সংজ্ঞায়িত হয় না, তার "মান" বলা ব্যতীত সম্পূর্ণ সেট সংখ্যার এমনকি এগুলি সংজ্ঞায়িত করা Math.log(-1) == Math.log(-1)হলেও এখনও মূল্যায়ন করে false। সুতরাং কেবলমাত্র "আসল সংখ্যাগুলি" ছাড়া অন্য কোনও নেই NaNতবে সেখানে উপস্থিত থাকলেও সেগুলি তুলনার জন্য ব্যবহার করা হয়নি।
দিমিত্রি জইতসেভ

20

ECMAScript (জাভাস্ক্রিপ্ট) মান নির্দিষ্ট করে Numbersহয় আইইইই 754 ভাসে, যার মধ্যে রয়েছে NaNএকটি সম্ভাব্য মান হিসাবে।

ইসিএমএ 262 5 ই বিভাগ 4.3.19 : সংখ্যা মান

ডাবল-স্পষ্টতা 64-বিট বাইনারি ফর্ম্যাট আইইইই 754 মানের সাথে সম্পর্কিত আদিম মান।

ইসিএমএ 262 5 ই বিভাগ 4.3.23 : এনএএন

একটি আইইইই 754 "নোট-এ-সংখ্যা" মান নয় এমন মান value

উইকিপিডিয়ায় আইইইই 754

আইইইই স্ট্যান্ডার্ড ফর ফ্লোটিং-পয়েন্ট এরিথমেটিক হ'ল একটি প্রযুক্তিগত মান যা ইনস্টিটিউট অফ ইলেকট্রিক্যাল অ্যান্ড ইলেকট্রনিক্স ইঞ্জিনিয়ার্স দ্বারা প্রতিষ্ঠিত এবং ভাসমান-পয়েন্ট গণনার জন্য সর্বাধিক ব্যবহৃত মান [...]

স্ট্যান্ডার্ড সংজ্ঞা দেয়

  • পাটিগণিত ফর্ম্যাটস : বাইনারি এবং দশমিক ভাসমান-পয়েন্ট ডেটার সেট, যা সীমাবদ্ধ সংখ্যার (স্বাক্ষরিত শূন্যগুলি এবং আজ্ঞাবহ সংখ্যাগুলি সহ), অসীম এবং বিশেষ "সংখ্যা নয়" মানগুলি নিয়ে গঠিত (এনএএন)

[...]


8

typeof NaNফিরে আসে 'number'কারণ:

  • ইসমাস্ক্রিপ্ট স্পেস বলে যে সংখ্যার ধরণটিতে NaN অন্তর্ভুক্ত রয়েছে:

    4.3.20 নম্বর প্রকার

    বিশেষ "নন-এ-সংখ্যা" (এনএএন) মান, ধনাত্মক অনন্ত এবং নেতিবাচক অনন্ত সহ সমস্ত সম্ভাব্য সংখ্যার মানগুলির সেট

  • সুতরাং typeofসেই অনুযায়ী রিটার্ন:

    11.4.3 টাইপ অফ অপারেটর

    উত্পাদন UnaryExpression : typeof UnaryExpression নিম্নলিখিত হিসাবে মূল্যায়ন করা হয়:

    1. যাক Val মূল্যায়নের ফলও হতে UnaryExpression
    2. তাহলে প্রকার ( Val ) হল রেফারেন্স , তারপর
      1. তাহলে IsUnresolvableReference ( Val ) হল সত্য , এর বিনিময়ে "undefined"
      2. যাক Val হতে GetValue ( Val )।
    3. ফিরুন স্ট্রিং দ্বারা নির্ধারিত প্রকার ( Val ছক 20 অনুযায়ী)।

                    Table 20 — typeof Operator Results
    ==================================================================
    |        Type of val         |              Result               |
    ==================================================================
    | Undefined                  | "undefined"                       |
    |----------------------------------------------------------------|
    | Null                       | "object"                          |
    |----------------------------------------------------------------|
    | Boolean                    | "boolean"                         |
    |----------------------------------------------------------------|
    | Number                     | "number"                          |
    |----------------------------------------------------------------|
    | String                     | "string"                          |
    |----------------------------------------------------------------|
    | Object (native and does    | "object"                          |
    | not implement [[Call]])    |                                   |
    |----------------------------------------------------------------|
    | Object (native or host and | "function"                        |
    | does implement [[Call]])   |                                   |
    |----------------------------------------------------------------|
    | Object (host and does not  | Implementation-defined except may |
    | implement [[Call]])        | not be "undefined", "boolean",    |
    |                            | "number", or "string".            |
    ------------------------------------------------------------------

এই আচরণটি ভাসমান-পয়েন্ট পাটিগণিত (আইইইই 754) এর জন্য আইইইই স্ট্যান্ডার্ড অনুসারে :

4.3.19 সংখ্যা মান

ডাবল-স্পষ্টতা 64-বিট বাইনারি ফর্ম্যাট আইইইই 754 মানের সাথে সম্পর্কিত আদিম মান

4.3.23 NaN

সংখ্যা মান যা একটি আইইইই 754 "নন-এ-সংখ্যা" মান

8.5 নম্বর প্রকার

বাইনারি ফ্লোটিং-পয়েন্ট অ্যারিমেটিকের জন্য আইইইই স্ট্যান্ডার্ডে উল্লিখিত ডাবল-স্পষ্টতা -৪ -বিট ফর্ম্যাট আইইইই 75৫৪ মানকে উপস্থাপন করে সংখ্যার ধরণের হুবহু 18437736874454510107 (যা, 2 53 −2 64 +3) মান রয়েছে the 9007199254740990 ব্যতীত এটি হল, 2 53 −2) আইইইই স্ট্যান্ডার্ডের স্বতন্ত্র "নন-এ-সংখ্যা" মানগুলি একক বিশেষ ন্যান মান হিসাবে ECMAScript এ উপস্থাপন করা হয়। (দ্রষ্টব্য যে NaN মান প্রোগ্রাম এক্সপ্রেশন দ্বারা উত্পাদিত হয় NaN।)


5

NaN একটি বৈধ ভাসমান পয়েন্ট মান ( http://en.wikedia.org/wiki/NaN )

এবং NaN === NaN মিথ্যা কারণ তারা অগত্যা একই অ-সংখ্যা নয়


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

1
তাহলে কেন সব কিছু Infinityএকরকম? কোন চিন্তা?
হাশেম কুলামি

5

NaN != NaNকারণ সেগুলি একই অ-সংখ্যা নয়। সুতরাং এটি অনেক অর্থবহ করে ... এছাড়াও কেন ভাসমানগুলিতে +0.00 এবং -0.00 উভয়ই একই নয়। রাউন্ডিং এগুলি করতে পারে যে তারা আসলে শূন্য নয়।

টাইপফোর ক্ষেত্রে, এটি ভাষার উপর নির্ভর করে। এবং বেশিরভাগ ভাষা বলবে যে এনএএন এটি কীভাবে শ্রেণিবদ্ধ করে তার উপর নির্ভর করে একটি ভাসা, দ্বৈত বা সংখ্যা ... আমি কোনও ভাষা জানি না যে এটি বলবে এটি একটি অজানা প্রকার বা নাল।


1
ehr, বিবেচনা করুন: var x = parseInt ('no dice'), y = x; এখন আমি বলব যে এনএএন উভয়ই ঠিক এক রকম? তবে না, x === y মিথ্যাও ফিরে আসে।
KooiInc

হ্যাঁ, তবে আপনি নিশ্চিত হয়ে উঠতে পারবেন না, এবং এগুলি একই হয় না। এটি ডাটাবেসে নুলযোগ্য যুক্তির মতো একই যুক্তি। যদিও অনেক লোক এগুলিকে অন্যান্য প্রোগ্রামিং ভাষা থেকে নাল পয়েন্টার হিসাবে একই মনে করে তবে তাদের সম্পূর্ণ ভিন্ন শব্দার্থবিদ্যা রয়েছে। তারা "অজানা" এবং এইভাবে অন্যটির তুলনায় একটি নুল মান সর্বদা মিথ্যা। একটি নুল মান নিয়ে গণনা করা শেষ হয় NULL ফলাফলের সাথে। পরিবর্তে মান হচ্ছে নামক অজানা দৃষ্টিকোণ থেকে এটি দেখতে হলে চেষ্টা করুন
সিনে

প্রকারভেদ হিসাবে number, NaNআদিম, এবং অতএব স্বতন্ত্রভাবে এর মান দ্বারা নির্ধারিত হয়।
দিমিত্রি জইতসেভ

4

NaNমানে নং আংটি । এটি এমন একটি সাংখ্যিক ডেটা টাইপের মান (সাধারণত ভাসমান পয়েন্টের ধরণের, তবে সর্বদা নয়) যা শূন্য দ্বারা ভাগ করার মতো একটি অবৈধ ক্রিয়াকলাপের ফলাফলকে উপস্থাপন করে।

যদিও এর নামগুলি বলে যে এটি কোনও সংখ্যা নয়, এটি ধারণ করতে ব্যবহৃত ডেটা টাইপ একটি সংখ্যার প্রকার। সুতরাং জাভাস্ক্রিপ্টে, ডেটা টাইপ জিজ্ঞাসা NaNফিরে আসবে number(যেমন alert(typeof(NaN))স্পষ্টভাবে দেখানো হয়েছে)।


আসলে শূন্য দ্বারা InfinityNaN
বিভাজককে

2

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


2

NaNএর অর্থের আরও সুনির্দিষ্টভাবে এবং কম বিভ্রান্তিকরভাবে বর্ণনা করার জন্য আরও ভাল নাম হ'ল সংখ্যাসূচক ব্যতিক্রম হবে । এটি সত্যই অন্যরকম একটি ব্যতিক্রম বস্তু যা আদিম ধরণের (ভাষা নকশার দ্বারা) হিসাবে ছদ্মবেশ ধারণ করে, যেখানে একই সাথে এটির মিথ্যা স্ব-তুলনার ক্ষেত্রে আদিম হিসাবে বিবেচিত হয় না। কোথা থেকে বিভ্রান্তি। এবং যতক্ষণ না ভাষা যথাযথ ব্যতিক্রম বস্তু এবং আদিম সংখ্যাগুলির মধ্যে চয়ন করার জন্য "তার মন তৈরি করবে না" , বিভ্রান্তি থেকেই যায়।

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

  • হয় NaNআপাত কীভাবে কার্যকর হয়েছে সে সম্পর্কিত দরকারী তথ্য সম্বলিত একটি বিশেষ ব্যতিক্রমী বস্তু তৈরি করুন, বর্তমানে যে তথ্যটি প্রয়োগ করা হয়েছে তা ফেলে দেওয়ার বিপরীতে, হার্ড-টু-ডিবাগ কোডের দিকে নিয়ে যাওয়া;
  • বা NaNআদিম ধরণের একটি সত্তা তৈরি করুন number(এটিকে কম বিভ্রান্তিকরভাবে "সংখ্যাসূচক" বলা যেতে পারে) সেক্ষেত্রে এটি নিজের সমতুল্য হওয়া উচিত এবং অন্য কোনও তথ্য থাকতে পারে না; দ্বিতীয়টি স্পষ্টতই নিকৃষ্ট পছন্দ।

অত্যাচার একমাত্র অনুমেয় সুবিধা NaNমধ্যে numberটাইপ কোনো সংখ্যাগত অভিব্যক্তি সেটিকে ফিরে নিক্ষেপ করতে সক্ষম হচ্ছে। যাইহোক, যা এটি ভঙ্গুর পছন্দ করে তোলে, কারণ যে কোনও সংখ্যাসূচক প্রকাশের ফলাফলটি NaNহয় তা হয় NaNবা অনাকাঙ্ক্ষিত ফলাফলের দিকে নিয়ে যায় যেমন NaN < 0মূল্যায়ন করা false, অর্থাত booleanব্যতিক্রম না রেখে ফিরে আসা ।

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

এবং তারপরে আমাদের কাছে অগোছালো শান্ত বনাম গোলমাল ওরফে সংকেত NaNপার্থক্য রয়েছে । কোনটি ব্যতিক্রমগুলি কীভাবে পরিচালনা করা হয় সে সম্পর্কে সত্যই এটি ব্যতিক্রমগুলি নিজেরাই নয় এবং অন্যান্য ব্যতিক্রমগুলির চেয়ে আলাদা কিছু নয়।

একইভাবে, Infinityএবং আসল লাইনের প্রসারণে উদ্ভূত সংখ্যাসূচক+Infinity উপাদানগুলি কিন্তু তারা আসল সংখ্যা নয়। গাণিতিকভাবে, এগুলি প্রকৃত সংখ্যাগুলির ক্রম দ্বারা প্রতিনিধিত্ব করা যেতে পারে হয় হয় বা দুটিতে রূপান্তর করে ।+-Infinity


1

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


অন্যান্য প্রতিটি বস্তুর মতো, সংখ্যার যে কোনও ধরণের সম্পত্তি থাকতে পারে। Number.fu = "bar"; alert(typeof Number.fu);
অ্যালসিএন্ডে

NaNসঞ্চিত মান নয় Number.NaN, তা যাই হোক না কেন। NaNসংখ্যা প্রকারের একটি আদিম মান। আর উপরন্তু, মান Number.NaNহয় NaN, কিন্তু যে সম্পর্কহীন নয়।
অরিওল

1

এনএএন সম্পর্কে চিন্তা করার সর্বোত্তম উপায়টি এটি একটি পরিচিত সংখ্যা নয় not কেন ন্যান! = এনএন কারণ প্রতিটি এনএএন মান কিছু অনন্য অজানা সংখ্যার প্রতিনিধিত্ব করে। ন্যানগুলি প্রয়োজনীয় কারণ ভাসমান পয়েন্ট সংখ্যাগুলির সীমিত মান রয়েছে। কিছু ক্ষেত্রে রাউন্ডিং ঘটে যেখানে নিম্ন বিটগুলি হারিয়ে যায় যা 1.0 / 11 * 11! = 1.0 এর মতো বোকামি হিসাবে দেখা দেয়। প্রকৃতপক্ষে বড় মানগুলি যেগুলির চেয়ে বড় সেগুলি হল অনন্ত একটি নিখুঁত উদাহরণ হিসাবে ন্যান।

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


অসীম কোনও এনএএন প্রতিনিধিত্ব করে না। সীমার বাইরে কোনও সংখ্যার প্রতিনিধিত্ব করার চেষ্টাটি বৃত্তাকার নীচে (সর্বোচ্চ / -আইএনএফ) বা উপরে (কমপক্ষে / + ইনফ) হবে।
অরেঞ্জডগ

1

কারণ NaN একটি সংখ্যার ডেটা টাইপ।


1

NaNদৃষ্টিকোণ থেকে একটি সংখ্যা, তবে এটি 1, 2 বা 329131 এর মতো সাধারণ সংখ্যা নয় "" নট এ সংখ্যা " নামটি এই সত্যটি বোঝায় যে উপস্থাপিত মানটি বিশেষ এবং আইইইই ফর্ম্যাট স্পেস ডোমেন সম্পর্কে, না জাভাস্ক্রিপ্ট ভাষা ডোমেন।


1

JQuery ব্যবহার করা হলে, আমি isNumericপ্রকারটি পরীক্ষা করার চেয়ে পছন্দ করি :

console.log($.isNumeric(NaN));  // returns false
console.log($.type(NaN));       // returns number

http://api.jquery.com/jQuery.isNumeric/


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

Rec জন্য, isNumberথেকে utilটাইপ করা বিষয় এছাড়াও আয় trueজন্য NaN
অশোক এমএ

0

জাভাস্ক্রিপ্টে কেবল একটি সাংখ্যিক ডেটা টাইপ রয়েছে, এটি স্ট্যান্ডার্ড -৪-বিট ডাবল-স্পষ্টতা ভাসা। সবই ডাবল। NaN ডাবল এর একটি বিশেষ মান, তবে এটি দ্বিগুণ।

যা যা করা হয় parseIntতা হ'ল আপনার স্ট্রিংটিকে একটি সংখ্যাসূচক ডেটা টাইপের "কাস্ট" করা, সুতরাং ফলাফলটি সর্বদা "সংখ্যা" হয়; শুধুমাত্র যদি মূল স্ট্রিং পার্সেবল না হয় তবে এর মান NaN হবে।


0

NaN এখনও একটি সাংখ্যিক প্রকার, তবে এটি এমন মানকে উপস্থাপন করে যা কোনও বৈধ সংখ্যা উপস্থাপন করতে পারে না।


0

আমরা তর্ক করতে পারি যে NaN একটি বিশেষ কেস অবজেক্ট। এই ক্ষেত্রে, NaN এর অবজেক্ট এমন একটি সংখ্যা উপস্থাপন করে যা কোনও গাণিতিক ধারণা তৈরি করে না। গণিতে আরও কিছু বিশেষ কেস অবজেক্ট রয়েছে যেমন INFINITE ইত্যাদি।

আপনি এটির সাথে এখনও কিছু গণনা করতে পারেন, তবে এটি অদ্ভুত আচরণ অর্জন করবে।

এখানে আরও তথ্য: http://www.concentric.net/~ttwang/tech/javafloat.htm (জাভা ভিত্তিক, জাভাস্ক্রিপ্ট নয়)


0

আপনি জাভাস্ক্রিপ্ট প্রেম করতে হবে। এটি কিছু আকর্ষণীয় ছোট quirks আছে।

http://wtfjs.com/page/13

আপনি যদি তাদের যৌক্তিকভাবে কাজ করা বন্ধ করেন, বা সংখ্যা তত্ত্ব সম্পর্কে যদি আপনি কিছুটা জানেন, তবে তবুও এগুলি সম্পর্কে আপনাকে জানতে না পারলে তারা আপনাকে ধরে ফেলতে পারে those তবে তাদের বেশিরভাগই ব্যাখ্যা করা যেতে পারে।

যাইহোক, আমি বাকী http://wtfjs.com/ পড়ার পরামর্শ দিচ্ছি - এটির চেয়ে আরও অনেক মজাদার স্নিগ্ধতা খুঁজে পাওয়া যায়!


0

NaN মানটি আসলেই সংখ্যা reallyNanN তাই আপনি যখন এটি জিজ্ঞাসা করবেন এটি একটি সংখ্যা কিনা এটি হ্যাঁ বলবে। আপনি isNaN () কল ব্যবহার করে সঠিক কাজটি করেছেন।

তথ্যের জন্য, NaN নম্বরগুলিতে ক্রিয়াকলাপ দ্বারাও ফিরে আসতে পারে যা শূন্য বা negativeণাত্মক সংখ্যার বর্গমূল দ্বারা বিভাগের মতো সংজ্ঞায়িত হয় না।


কোন অর্থে এটি "মান"? NaN == Number.NaNমূল্যায়ন false!
দিমিত্রি জইতসেভ

@ দিমিত্রিজাইতসেভ আপনি কি থ্রেডটি পড়েছেন? এবং আপনি কি চেষ্টা করেছেন যদি (parseInt ("nan") == সংখ্যা.নান)? এছাড়াও চেষ্টা করুন! = এবং এটি আপনাকে কী বলে তা দেখুন।
রব

দুঃখিত, বোকা NaN==NaNঅস্তিত্ব ভুলে গেছি false, এটি অবশ্যই একজন দুঃখী মানুষ ছিল যে এটি আবিষ্কার করেছিল যে এটি সকলকে কষ্ট দেয় make
দিমিত্রি জাইতসেভ

0

একটি উদাহরণ

কল্পনা করুন আমরা একটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করছি:

Number("string"); // returns NaN

আমরা ডাটা টাইপটিকে সংখ্যায় পরিবর্তন করেছি তবে এর মান কোনও সংখ্যা নয়!


আপনি প্রশ্নের বিন্দুটি মিস করেছেন বলে মনে হচ্ছে। NaNহল সংখ্যা প্রকার। প্রশ্ন হচ্ছে কেন।
কোয়ান্টিন

@ কুইন্টিন আমি শেষ লাইনে ব্যাখ্যা করেছি।
আমির ফো

-1

এটি POSITIVE_INFINITY হিসাবে সংখ্যার ধরণের বিশেষ মান

কেন? নকশা করে

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