Ama merak ettiğim şey, bilgisayar sıfıra bölmeye kalkıştığında mı, yoksa sadece "yerleşik koruma" da mı yaptığını, böylece "0/0" gördüğü zaman, onu hesaplamadan önce bile bir hata döndürdüğü mü?
Yana x/0
hiçbir anlamı, dönemini yapar, bilgisayarlar her zaman sıfıra bölme kontrol edilmelidir. Burada bir sorun var: Programcılar (a+b)/c
bu hesaplamanın bir anlam ifade edip etmediğini kontrol etmek için uğraşmadan hesaplama yapmak istiyor . CPU + sayı tipi + işletim sistemi + dili tarafından sıfıra bölünme yanıtının altında, çok sert bir şey yapmak (örneğin, programın çökmesine) ya da aşırı derecede iyi huylu bir şey yapmak (örn. IEEE kayan nokta NaN
, "Sayı Değil" olan bir sayı gibi
Sıradan bir ortamda, bir programcının (a+b)/c
mantıklı olup olmadığını bilmesi beklenir . Bu bağlamda, bölünmeyi sıfır ile kontrol etmek için hiçbir neden yoktur. Eğer sıfıra bölünme gerçekleşirse ve makine dili + uygulama dili + veri tipi + buna verilen işletim sistemi ise programın çökmesine neden oluyorsa, sorun değil. Yanıt sonunda programdaki her sayıyı kirletebilecek bir değer oluşturmaksa, bu da sorun değil.
Ne "sert bir şey" ne de "aşırı derecede iyi huylu", yüksek güvenilirlikli bilgi işlem dünyasında yapılacak doğru şey değildir. Bu varsayılan tepkiler bir hastayı öldürebilir, bir uçağı çökertebilir veya bir bombayı yanlış yere patlatabilir. Yüksek güvenilirlikli bir ortamda, (a+b)/c
kod yazarken veya modern zamanlarda belki de verboten yapıları kontrol eden bir araç tarafından otomatik olarak ölüme toplanacak olan bir programcı ölüme götürülecektir. Bu ortamda, bu programcının satırları boyunca bir şeyler yazması gerekirdi div(add(a,b),c)
(ve muhtemelen bazı hata durumlarını kontrol ediyordu ). Kaputun altında, div
(ve ayrıca add
) işlevleri / makroları bölmeye karşı sıfır (veya durumunda taşma) karşı korur add
. Bu korumanın ne gerektirdiği, uygulamaya özeldir.