2010-01-03 26 views
4

如何在編譯器/芯片級別上進行計算?分零異常如何工作?

爲什麼C++總是在運行時而不是編譯時拋出這些異常(如果在編譯時間除數已知爲零)?

+1

這些應該是兩個單獨的問題。 – jason 2010-01-03 17:50:46

+0

爲什麼程序員在分割前檢查零值? – 2010-01-03 19:08:02

+0

托馬斯:因爲零被傳入的機會非常低,因爲異常情況很好,因爲額外的檢查對於處理器來說是額外的工作,我們可能不希望這種情況出現在高出現循環中。 – 2010-01-03 20:08:07

回答

0
  1. 大查找表。記得學校的乘法表嗎?同樣的想法,但分裂而不是乘法。很明顯,並不是每一個數字都在那裏,但是這個數字被分解成大塊,然後在桌子上猛推。

  2. 除法發生在運行時,而不是在編譯時。是的,編譯器可以看到除數爲零,但大多數人不希望寫出這樣的無效聲明。

1
  1. 在芯片級,分裂是當然帶電路完成的。二進制除法電路的Here's an overview
  2. 因爲C++編譯器只是不檢查保證等於0的除數。它可以檢查這個。
2
  1. 這取決於。有些處理器有硬件除法指令。一些處理器必須做的計算是軟件。
  2. 某些C++編譯器不會在運行時捕獲。通常是因爲沒有硬件支持來阻止除以零。