निम्नलिखित कोड https://kotlinlang.org/docs/reference/functions.html?q=&p=0क्या मैं तुलना कर सकता हूं कि कोटलिन में दो फ़्लोटिंग-पॉइंट नंबर बराबर हैं या नहीं?
यह कोड कोसाइन के फिक्सपॉइंट की गणना करता है, जो गणितीय स्थिर है। यह बस Math.cos को बार-बार 1.0 से शुरू करता है जब तक परिणाम 0.7390851332151607 का नतीजा न मिलने तक परिणाम नहीं बदलता है।
मेरे दिमाग में, हम तुलना नहीं कर सकते कि दो फ़्लोटिंग-पॉइंट नंबर बराबर हैं, इसलिए मुझे लगता है कि if (x == y)
का परिणाम हमेशा झूठा है, है ना?
private fun findFixPoint(): Double {
var x = 1.0
while (true) {
val y = Math.cos(x)
if (x == y) return y
x = y
}
}
यदि आप चाहते हैं तो आप दो फ़्लोटिंग पॉइंट की तुलना कर सकते हैं, आप क्यों नहीं कर सकते? यह एक आम परिदृश्य नहीं है क्योंकि यह ज्यादातर समस्याओं के लिए एक भंगुर समाधान है। आप आमतौर पर क्या करना चाहते हैं अंतर के एक ईपीएसलॉन के भीतर मूल्यों की तुलना करें या सटीक दशमलव अंकगणित का उपयोग करें। इस मामले में यह एक वैध समाधान की तरह दिखता है क्योंकि यह एक निश्चित मूल्य में अभिसरण करने के लिए बाध्य है। – DPM
कुछ भाषाओं में, जैसे कि फोरट्रान, फ़्लोटिंग-पॉइंट नंबर सटीक नहीं है, इसलिए यदि (x == y) वापसी वाई होना चाहिए (एबीएस (एक्स-वाई) <0.0000000001) वापसी y – HelloCW