आधिकारिक जावाडोक says कि Math.floor एक दोगुना लौटाता है जो "गणितीय पूर्णांक के बराबर" है, लेकिन फिर इसे एक int वापस क्यों नहीं करना चाहिए?Math.floor दोहरा क्यों देता है?
उत्तर
ही जावाडोक के अनुसार:
तो तर्क NaN या एक अनन्तता या सकारात्मक शून्य या नकारात्मक शून्य है, तो परिणाम तर्क के रूप में एक ही है। एक int के साथ ऐसा नहीं कर सकता।
सबसे बड़ा डबल मान सबसे बड़ा int से भी बड़ा है, इसलिए इसे लंबा होना होगा।
यह सटीकता के लिए है। डबल डेटा-टाइप में 53 बिट मंटिसा है। अन्य चीजों के बीच इसका मतलब है कि एक डबल सटीक हानि के बिना 2^53 तक पूरी तरह से प्रतिनिधित्व कर सकता है।
यदि आप इतनी बड़ी संख्या को एक पूर्णांक में संग्रहीत करते हैं तो आपको ओवरफ़्लो मिल जाएगा। इंटीग्रर्स में केवल 32 बिट हैं।
दोहराव के रूप में पूर्णांक को वापस करना सही काम है क्योंकि यह एक पूर्णांक की तुलना में बहुत अधिक उपयोगी उपयोगी संख्या प्रदान करता है।
यह निश्चित रूप से ऐसे मूल्यों का सामना करने के लिए एक लंबा समय लौटा सकता है। आपको अभी भी काम करना होगा कि डबल्स> 2^63 के साथ क्या करना है। –
@ जोन, सच है, लेकिन इसके परिणामस्वरूप प्रदर्शन प्रभाव होगा (किसी भी निर्देश सेट में लंबे समय से दो तक रूपांतरण निर्देश नहीं है जिसे मैं जानता हूं)। मुझे आश्चर्य है कि Math.floor डबल्स के साथ क्या करता है> 2^53 पहली जगह पर। कुछ परिणाम प्रतिनिधित्व योग्य नहीं हैं। –
लेकिन फिर, छद्म-मूर्खतापूर्ण रूप (int) Math.floor (foo), जो आधिकारिक जावाडोक में भी दिखाई देता है असुरक्षित है क्योंकि परिणाम int में फिट नहीं हो सकता है, क्या मैं सही हूँ? और फिर फिर, जो Math.floor का उपयोग करने के लिए एक सुरक्षित रूप है, क्योंकि परिणाम भी लंबे समय तक फिट नहीं हो सकता है? – Raibaz
ताकि त्रुटि और अन्य गैर पूर्णांक मान गणना की श्रृंखला के माध्यम से सही ढंग से कैस्केड कर सकें।
उदाहरण के लिए, यदि आप Math.floor में नंबर नहीं (NaN) फ़ीड करते हैं, तो यह इसे पास कर देगा।
यदि यह पूर्णांक लौटाता है तो यह इन स्थिति या त्रुटियों को पास नहीं कर सका, और आप पहले की गणना से खराब परिणाम प्राप्त कर सकते हैं जो अच्छे लगते हैं लेकिन आगे की प्रक्रिया के बाद गलत हैं।
-Adam
क्या आप अगर आप इसे दे दी है यह वापस जाने के लिए चाहते हो जाएगा एक डबल सबसे बड़ा पूर्णांक या लंबे समय से भी बड़ा?
(वैसे अगर यह सबसे बड़ा लंबा परिशुद्धता से भी बड़ा है कम वैसे भी होगा - यह निकटतम सैद्धांतिक पूर्णांक नहीं हो सकता है - लेकिन फिर भी ...)
एक पूर्णांक है बस के रूप में और एक चल बिन्दु जावा में विभाजन, वहाँ पूर्णांक और चल बिन्दु तरीके फर्श करने के लिए कर रहे हैं:
double f = Math.floor(x);
या
int k = (int) x;
लेकिन आप हमेशा च के साथ फर्श उपयोग करने के साथ सावधान रहना चाहिए अंतर्निहित सटीक अंकगणितीय: x की आपकी गणना 1.99 99 99 99 जैसी कुछ उत्पन्न कर सकती है जिसे दोनों रूपों से 1 तक नहीं किया जाएगा। वहां कुछ एल्गोरिदम हैं जिन्हें कुछ इनपुट मानों के गलत परिणामों को उत्पन्न करने से बचने के लिए इस सीमा के आसपास काम करने की आवश्यकता है।
यह लगभग काम करता है, सिवाय इसके कि (int) -1.5 = -1; – PearsonArtPhoto
अन्य लोगों ने आपको बताया है कि, मैं आपको यह बताने जा रहा हूं कि आप इसे कैसे करना चाहते हैं।
int a=(int) 1.5;
हालांकि, (int) हमेशा 0. की ओर दौर इस प्रकार, यदि आप एक ऋणात्मक संख्या क्या करना चाहते हैं: आप केवल सकारात्मक संख्या का उपयोग करने जा रहे हैं, तो आप इस कथन का उपयोग कर सकते
int a=(int) -1.5; //Equal to -1
मेरे मामले में, मैं यह नहीं करना चाहता था।मैंने गोल करने के लिए निम्नलिखित कोड का उपयोग किया, और ऐसा लगता है कि सभी किनारे के मामलों को अच्छी तरह से संभाला जाता है:
private static long floor(double a)
{
return Math.round(Math.floor(a));
}
'(int) Math.floor (ए) 'का उपयोग क्यों नहीं करें? यह शायद अधिक कुशल है और यह छोटा है। –
- 1. क्यों कोई Math.floor (फ्लोट) नहीं है?
- 2. Math.floor() कोडेक
- 3. समझाओ Math.floor (math.random())
- 4. मैं Math.roor के साथ Math.floor को क्यों जोड़ूं?
- 5. आईएसओ 8601 दोहरा अंतराल
- 6. मुझे कुछ मूल्य के लिए प्रारंभिक दोहरा चर क्यों दिखाई देता है जैसे 21.4 2199 99 999618530273?
- 7. Math.floor (Math.random()) +1 वास्तव में क्या करता है?
- 8. दोहरा प्रत्येक पंक्ति
- 9. गैर दोहरा यादृच्छिक संख्या
- 10. Math.ceil और Math.floor एक ही मूल्य
- 11. numpy.shape असंगत प्रतिक्रिया देता है - क्यों?
- 12. Observable.Generate() सिस्टम क्यों फेंक देता है। StackOverflowException?
- 13. संकलक इस पर्ची को क्यों देता है?
- 14. जावा-वर्जन पुराने संस्करण क्यों देता है?
- 15. {} + [] जावास्क्रिप्ट में 0 क्यों देता है?
- 16. एंड्रॉइड - iTemLongClick (...) एक बूलियन क्यों देता है?
- 17. आईडीटाइडर एक पंक्ति क्यों खो देता है?
- 18. NHibernate क्यों "StaleObjectStateException" फेंक देता है?
- 19. ओपनसीवी मुझे ब्लैक स्क्रीन क्यों देता है?
- 20. ShowDialog हमेशा DialogResult.Cancel क्यों देता है?
- 21. Corrcoef एक मैट्रिक्स क्यों देता है?
- 22. XmlDocument.LoadXml क्यों System.Net.WebException फेंक देता है?
- 23. प्री-प्रोसेसर क्यों एक जगह देता है?
- 24. GL_LINEAR_MIPMAP_LINEAR एक INVALID_ENUM त्रुटि क्यों देता है?
- 25. StreamReader.ReadLine क्यों OutOfMemoryException फेंक देता है?
- 26. GetDay गलत मान क्यों देता है? (जावास्क्रिप्ट)
- 27. गतिशील कॉल गतिशील परिणाम क्यों देता है?
- 28. जाहिर है कि अलग-अलग sha1 देता है, क्यों?
- 29. कास्टिंग CS0030 क्यों देता है, जबकि "जैसा" काम करता है?
- 30. बढ़ावा क्यों देता है :: noncopyable विरासत की आवश्यकता है
मान लीजिए यह नेट के लिए भी लागू होता है? – Graviton
गणित के साथ असंगत लगता है। राउंड फ़ंक्शन, जो int/long लौटाते हैं और विशेष मामलों को एक अलग तरीके से संभालते हैं। – zod
ध्यान दें कि जावाडोक का कहना है कि यह _ सबसे बड़ा (सकारात्मक अनंतता के निकटतम) *** फ्लोटिंग-पॉइंट मान *** देता है जो कि तर्क से कम या बराबर है और गणितीय पूर्णांक के बराबर है "_। एक मान _x> 2^53_ दिया गया है जो उसके आंशिक भाग के साथ मूल्य के समान नहीं होगा। यह उससे काफी छोटा हो सकता है। –