簡體   English   中英

為什么整數除以零會導致浮點異常?

[英]Why does integer division by zero result in a floating point exception?

在C程序中除以零會導致異常終止,並顯示錯誤消息Floating point exception (core dumped) 這對於浮點除法並不足為奇,但為什么在整數除以零時會這樣說呢? 整數除法實際上是否使用引擎蓋下的FPU?

(順便說一下,這都是在x86下的Linux上。)

整數除法實際上是否使用引擎蓋下的FPU?

不,Linux也只是在這種情況下生成SIGFPE(它是一個遺留名稱,其使用現已擴展)。 實際上,單Unix規范將SIGFPE定義為“ 錯誤的算術運算 ”。

man signal提到:

整數除零具有未定義的結果。 在某些架構上,它將生成SIGFPE信號。 (也將最負整數除以-1可能會生成SIGFPE。)

我對此的歷史解釋的猜測是原始的unix硬件沒有在整數除以零上生成陷阱,因此SIGFPE的名稱是有意義的。 (PDP組裝程序員,確認?)然后,當系統被移植(或者在Linux的情況下,重新實現)到具有整數被零除陷阱的硬件時,不值得添加新的信號編號,所以舊的獲得了一個新的含義,現在有一個稍微混亂的名字。

可能有許多不同的特定於實現的原因。

例如,x86平台上的FPU單元支持浮點和整數格式,用於讀取參數和寫入結果。 當平台本身為16位時,一些編譯器使用FPU來執行32位整數操作數的划分(因為32位寬數據沒有精度損失)。 在這種情況下,對於無效的32位整數除法,獲得真正的FPU錯誤沒有什么異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM