GHCi नीचे गलत उत्तर क्यों देता है?
GHCi
λ> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24)
4.503599627370496e15
python3
>>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24)
0.0
अद्यतन मैं हास्केल (^) फ़ंक्शन को निम्नानुसार लागू करेगा।
powerXY :: Double -> Int -> Double
powerXY x 0 = 1
powerXY x y
| y < 0 = powerXY (1/x) (-y)
| otherwise =
let z = powerXY x (y `div` 2)
in if odd y then z*z*x else z*z
main = do
let x = -20.24373193905347
print $ powerXY (powerXY x 12) 2 - powerXY x 24 -- 0
print $ ((x^12)^2) - (x ^ 24) -- 4.503599627370496e15
हालांकि मेरा संस्करण @WillemVanOnsem द्वारा नीचे दिए गए किसी भी अधिक सही नहीं है, लेकिन यह अजीब रूप से इस विशेष मामले के लिए सही उत्तर देता है।
अजगर भी ऐसा ही है।
def pw(x, y):
if y < 0:
return pw(1/x, -y)
if y == 0:
return 1
z = pw(x, y//2)
if y % 2 == 1:
return z*z*x
else:
return z*z
# prints 0.0
print(pw(pw(-20.24373193905347, 12), 2) - pw(-20.24373193905347, 24))
2.243746917640863e31 - 2.2437469176408626e31
जिसमें एक छोटी गोलाई त्रुटि होती है जो प्रवर्धित हो जाती है। रद्दीकरण मुद्दे की तरह दिखता है।
a^24
लगभग है2.2437e31
, और इस प्रकार एक गोल त्रुटि है जो इसे पैदा करता है।