2010-03-05 88 views
3

也許在這裏問這是一個錯誤的問題,但我很好奇。我知道很多語言在被要求除以0時會簡單地爆炸和失敗,但是有沒有任何編程語言可以智能地處理這個不可能的總和 - 如果是的話,它們是做什麼的?他們是否繼續處理,將350/0當作350,或者停止執行,或者是什麼?不同的編程語言如何處理除以0?

+1

你在問語言或語言實現嗎?並非所有的語言都規定了確切的行爲,因此它因實施而異。 – 2010-03-05 18:16:35

+0

詢問每種不同的語言如何處理場景。我收到了一些令人着迷的答案,只是對每種語言的作用感到好奇。 – Jack 2010-03-05 19:29:50

回答

0

Wikipedia

的擴展實數線的無窮大可在IEEE表示浮點數據類型,就像像普通浮點值1,1.5等。它們不是以任何方式出現的錯誤值,雖然它們通常(但不總是,因爲它取決於舍入)在溢出時用作替換值。除以零例外時,正或負無窮大作爲確切結果返回。

0

如果任何語言返回350,如果你做350/0,我會感到驚訝。僅舉兩個例子,但Java拋出一個可以被捕獲的異常。 C/C++只是崩潰(我認爲它會拋出一個可能被捕獲的信號)。

+1

有兩種不同的語言,稱爲C和C++,我不認爲他們中的任何一個在他們的標準中都有特定的規定。一種或兩種語言的某些實現可能會拋出信號。 – 2010-03-05 18:14:46

1

在Java中,在浮點上下文中除以零產生特殊值Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITY

+3

或'Double.NaN',如果你用零除零。 – mob 2010-03-05 18:05:35

4

鮮爲人知的Java programming language給出了在IEEE浮點上下文中除以零時的特殊常數Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITY(取決於分子)。整數除以零是未定義的,並導致ArithmeticException被拋出,這與「爆炸和失敗」情況完全不同。

+2

你如何雙倍無限?這不就是給你無限嗎?莫羅尼克的頭腦想知道! – 2010-03-05 18:41:53

+0

另外,如果你加倍不是一個數字,這是否使它成爲一個數字? – 2010-03-05 18:48:15

+0

@ T.E.D實際上,由於它們擴展的速度,有些無限大於其他,例如。 SUM(1..n)是一個小於SUM(1^2 ... n^2)的無窮大,因爲n接近無窮大(這是與數學的限制相關) – 2010-07-13 18:32:09

0

在Delphi中,如果它在運行時發生,它會引發編譯時錯誤(如果被0值const分開)或可捕獲的運行時錯誤。

這對C和C++來說是一樣的。

在PHP中,你會得到一個警告:

警告: <file.php>被零線X

因此,在PHP中,什麼東西如:

$i = 123/0; 

$我將被設置爲無。 但是 $ i不是=== NULL和isset($ i)返回true,is_string($ i)返回false。

+0

如果只有警告,那麼表達式返回? – 2010-03-05 19:01:09

+0

更新的答案有更多的信息。 – AlexV 2010-03-05 19:14:26

0

Python(至少版本2,我沒有3)拋出一個ZeroDivisionError,它可以被捕獲。

num = 42 
try: 
    for divisor in (1,0): 
     ans = num/divisor 
     print ans 
except ZeroDivisionError: 
    print "Trying to divide by 0!" 

打印出:

42 
Trying to divide by 0! 
+0

版本3.1仍然會引發ZeroDivisionError。 – dan04 2010-03-21 05:35:32

0

浮點數具體根據IEEE定義的NaN常數等。任何涉及THST值將保持不變,直到結束繼續進行操作。整數或整數與拋出的異常是不同的......在java中......