5.4.22 · D5 · HinglishScientific Computing (Python)
Question bank — Floating point gotchas — catastrophic cancellation, associativity failure
5.4.22 · D5· Coding › Scientific Computing (Python) › Floating point gotchas — catastrophic cancellation, associat

Upar wala figure is page ke almost har trap ke peeche ki mental picture hai: representable doubles number line par dots hain jinki spacing magnitude badhne par badh jaati hai, kisi bhi real ko nearest dot par snap karta hai, aur ties even dot ki taraf jaati hain.
True or false — justify
Float addition commutative hai ().
True. Machine compute karta hai — exact sum ko round karo — aur rounding se pehle hota hai, isliye dono orders ek hi dot par snap hoti hain.
Float addition associative hai ().
False. Har
+ apne intermediate result par apply karta hai us partial sum ki magnitude par set spacing ke saath, isliye alag grouping alag jagah round karti hai — e.g. ek taraf deta hai aur doosri taraf .Do nearly-equal doubles ko subtract karna khud ek inaccurate operation hai.
False. Sterbenz's lemma ke anusaar near-equal values ka subtraction bilkul exactly compute hota hai (koi rounding hi nahi); bada relative error pehle se hi un dono stored operands mein baka hua tha — subtraction sirf use reveal karta hai.
Machine epsilon woh sabse chhota positive number hai jo ek double represent kar sakta hai.
False. Yeh aur next double ke beech ki gap hai (). Sabse chhota positive subnormal double kaafi zyada chhota hota hai (); ye bilkul alag quantities hain.
Unit roundoff aur machine epsilon ek hi cheez hain.
False. . Machine epsilon ke paas adjacent doubles ke beech ka poora step hai; round-to-nearest sirf aadhe step se chuk sakta hai, isliye error bound use karta hai, nahi.
Jab ek real number exactly do doubles ke beech aadha padta hai, IEEE-754 use upar round karta hai.
False. Yeh round half to even use karta hai: woh neighbour choose karta hai jiska final mantissa bit ho, taaki ties lambi computations ko systematically upar bias na karein.
Agar ek formula real-number algebra mein correct hai, toh uska Python translation bhi correct hai.
False. Algebraic identity rounding se survive nahi karti: ek mathematically exact formula (e.g. ) Catastrophic cancellation se saari accuracy kho sakta hai, chahe symbols perfect hon.
Python mein 0.1 + 0.2 == 0.3 True hai.
False. mein se koi bhi binary mein exactly representable nahi hai; , se se alag hota hai, isliye
== False return karta hai.float128 (extended precision) use karna hamesha ek cancelling formula ko fix kar deta hai.
False. Higher precision sirf kuch digits ke liye disaster ko delay karta hai; agar expression ill-conditioned hai, amplification factor phir bhi blow up karta hai. Tumhe type widen nahi karna, balki reformulate karna hoga.
Ek number store karne ki rounding error ek fixed absolute amount hai.
False. Bound relative hai: (jahan ), isliye absolute error number ki magnitude ke saath badhti hai. Yahi relativity exactly woh reason hai kyun big-minus-big dangerous hai.
Smallest normal double se neeche ke numbers seedha zero par round ho jaate hain.
False. Smallest normal aur true zero ke beech subnormals hote hain (gradual underflow): leading mantissa bit ho jaata hai, precision ki jagah reach milti hai taaki tiny results smoothly degrade hon instead of par snap karne ke. Sirf smallest subnormal se neeche hi tum truly par underflow karte ho.
Kahan summation floating addition ko exact bana deta hai.
False. Yeh total error ko tak reduce karta hai (roughly se independent) lost low-order bits ko carry karke, lekin har individual add phir bhi apply karta hai — yeh compensate karta hai, eliminate nahi.
Largest se smallest tak numbers add karna safe order hai.
False. Yeh usually worst order hai: small terms bade running sum ke neeche absorb ho jaate hain. Smallest magnitudes pehle add karna (ya Kahan compensated summation use karna) safer hai.
Spot the error
if variance == 0.0: skip() ek degenerate dataset detect karne ke liye use kiya.
se compute ki gayi variance cancellation se ek tiny negative ya tiny positive number par round ho sakti hai, isliye
== 0.0 dono true zeros ko miss karta hai aur mis-fire bhi karta hai. variance <= tol test karo jahan tol ek absolute threshold ho jo data ke anusaar scale ho, e.g. tol = 1e-12 * mean_x**2 (numbers ki size ke relative, kyunki variance ki units value² hain).Bade ke liye directly compute karna.
Bade ke liye dono roots nearly equal hain, isliye unka difference catastrophic cancellation suffer karta hai. Ise ke roop mein rewrite karo — yahan dono roots add hoti hain; kyunki dono positive hain isliye denominator mein near-total cancellation nahi hoti, aur relative error rehta hai.
ki "" root sidha se lena.
ke saath, aur dono hain aur nearly equal hain, isliye subtraction catastrophic hai. Same-sign root pehle compute karo, phir lo — Quadratic formula numerical issues dekho.
"Jitna accurate ho sake" ke liye step se derivative approximate karna.
phir near-equals subtract karta hai, isliye cancellation dominate karta hai aur accuracy collapse ho jaati hai. Ek optimal hota hai jo truncation vs round-off error ko balance karta hai.
Ek million small transactions plus ek huge balance par total = sum(prices).
Naive summation har small price ko bade running total mein absorb hone deta hai, isliye cents silently gayab ho jaate hain (absorption). Small-to-large sum karo, ya Kahan use karo; Round-off error propagation dekho.
Bahut chhote x ke liye math.log(1 + x).
tiny
x ko round kar ke hataa deta hai (absorption), isliye uska log ho jaata hai ki jagah. math.log1p(x) use karo, jo se addition avoid karne ke liye built hai.Ek iterative solver mein convergence test while error != 0: se karna.
Floating error rarely bilkul tak pahunchti hai; yeh round-off level ke paas hamesha wobble karti rehti hai, isliye loop kabhi nahi rukti.
while error > tol: use karo, tol ko atol + rtol*scale choose karo (ek absolute floor plus ek relative part) rather than ek akele magic number ki jagah.Ek huge cancelling series jaise ko bade ke liye term by term sum karna.
Alternating terms enormous grow karte hain phir ek tiny result tak cancel ho jaate hain — sum mein catastrophic cancellation. compute karo (all-positive terms) aur uska reciprocal lo — lekin sirf moderate ke liye: bade ke liye,
inf par overflow karta hai aur answer ko swallow kar leta hai, isliye sidhe math.exp(-x) (ya range-reduction) use karo.Why questions
Near-equal numbers subtract karna relative error amplify kyun karta hai, naya error create kyun nahi karta?
Dono operands absolute error carry karte hain; true difference tiny hai, isliye un fixed absolute errors ko near-zero result se divide karna relative error, , ko explode karta hai. Koi naye bits lose nahi hote — chhota answer sirf purani error ko chhupa nahi sakta.
Do same-sign near-equal numbers add karna safe kyun hai jabki unhe subtract karna nahi?
ke saath ka result hai jo inputs jitna bada hai, isliye fixed absolute errors us relative mein chhoti rehti hain — amplifier . Subtraction result ko ke paas shrink kar deti hai jabki errors wahi rehti hain, isliye wahi errors answer ke relative huge ho jaati hain.
Multiplication/division "safe" kyun hai jabki subtraction "dangerous" hai?
mein relative errors simply add ho jaate hain () aur kisi bhi near-zero cheez se divide kabhi nahi hote, isliye amplification factor rehta hai. Subtraction near-zero difference se divide kar sakti hai, factor ko unbounded bana deta hai.
round hokar kyun ho jaata hai?
magnitude ke paas representable doubles ke beech spacing hai, jo se badi hai; added ek gap se neeche padta hai, isliye wapas par snap ho jaata hai — yeh absorb ho jaata hai.
Smallest-first summation order kyun help karta hai?
Chhote values pehle ek saath accumulate hokar ek aise magnitude mein grow kar jaate hain jo bade terms ke comparable ho, isliye jab finally ek bade number se milte hain toh woh representable bits occupy karte hain instead of uski gap ke neeche girne ke — unhe kam absorb kiya jaata hai.
Kahan summation (t - s) - y kyun subtract karta hai sirf y track karne ki jagah?
(t - s) woh part hai y ka jo rounding ke baad actually sum mein landa; poora y subtract karna negated dropped part ko isolate karta hai, jo phir next iteration mein feed hota hai taaki koi bits permanently lost na hon.IEEE-754 halves ko hamesha upar round karne ki jagah round-to-even kyun use karta hai?
Hamesha-upar ek tiny upward bias add kar deta har baar jab tie hoti, aur ek lambe sum mein woh biases systematic drift mein accumulate ho jaate. Round-to-even ties ko evenly split karta hai taaki woh average par cancel hon, bound ko unbiased rakhte hue.
Ek mathematically perfect identity numerically doosre se better kyun ho sakti hai?
Dono exact arithmetic mein equal hain lekin alag conditioning hai: ek near-equals ki subtraction ke aas-paas computation route kar sakti hai jabki doosri seedha usme walk kar jaati hai. Reformulating error behaviour change karta hai, math nahi — Numerical stability and conditioning dekho.
Error ko relatively kyun quote karte hain () rather than ek fixed number ke roop mein?
Floating point numbers ko logarithmically space karta hai — gap magnitude ke saath scale hoti hai — isliye ek bound jo ke saath scale ho (relative) accuracy ka honest, magnitude-independent description hai.
Floats ko tolerance ke saath compare karna sahi fix kyun hai instead of dono ko fewer digits par round karne ke?
Tolerance
abs(x-y) <= atol + rtol*max(|x|,|y|) float error ki relative nature ko respect karta hai aur magnitude ke saath adapt karta hai, jabki fixed-digit rounding ya toh large numbers ko over-reject karta hai ya chhote numbers ko over-accept karta hai.Edge cases
Amplification factor kya ban jaata hai jab exactly ho?
Yeh hai — formally infinite — lekin agar aur same stored value hain, toh result exactly hai zero relative error ke saath. Blow-up tab apply hota hai jab woh nearly lekin identically equal nahi hote.
Quadratic fix ke liye, agar ho toh kya break hota hai?
Ek root exactly hai; phir correctly hai, lekin tumhe se bhi guard karna hoga (dono roots zero, yaani ) division by zero avoid karne ke liye.
ko reformulate karne se pehle par kya hota hai?
around ke liye, exactly par round ho jaata hai, isliye aur ratio ho jaata hai — true limit ke muqable mein total loss. Identity ise restore karti hai.
Naive-sum error bound kya saare data ke liye tight hai?
Nahi — yeh worst case hai. Same-sign well-scaled data ke liye actual error kaafi chhoti hoti hai; badly ordered ya cancelling data ke liye yeh bound ke paas pahunch sakti hai. Yeh signal karta hai ki error ke saath badhti hai, jo Kahan remove karta hai.
0.0 == -0.0 ka result kya hai aur kya sign matter karta hai?
Yeh
True hai — positive aur negative zero equal compare karte hain — lekin woh downstream alag behave kar sakte hain (e.g. 1/0.0 deta hai, 1/-0.0 deta hai), isliye zero ka sign division aur branch cuts mein ek real edge case hai.Jab ek computation subnormal range mein drift ho jaaye toh kya hota hai, aur iska kya cost hai?
Smallest normal double se neeche ke results subnormals ke roop mein chalte rehte hain (gradual underflow) — tum seedha par jump nahi karte — lekin har subnormal ke paas fewer mantissa bits hote hain, isliye relative precision degrade hoti hai aur, kuch hardware par, subnormal arithmetic kaafi slow chalti hai (ya trap karta hai). Smallest subnormal se neeche tum par outright underflow karte ho.
Cancellation se aaye "negative variance" jaise ko kaise treat karna chahiye?
Yeh ek rounding artifact hai, real negative nahi; ise par clamp karo (
max(v, 0.0)) sqrt ko feed karne se pehle, warna sqrt nan return karega aur baad ki saari cheez poison ho jaayegi.Recall Ek-line summary jo saath le jaao
- Big minus big → chhota answer, bada error. ::: Relative error amplifier explode karta hai; ise avoid karne ke liye reformulate karo.
- vs ? ::: — aadhi gap, kyunki round-to-nearest sirf aadhe se chuk sakta hai.
- Order aur brackets float sums change karte hain. ::: Rounding per-operation hai; small-first sum karo ya Kahan use karo.
- Floats par
==ek trap hai. ::: Tolerance ke saath compare karo (math.isclose), atol + rtol style.