2013-05-11 48 views
3

常規1e3表示10**3爲什麼具有十進制值的指數表示法失敗?

>>> 1e3 
1000.0 
>>> 10**3 
1000 

類似的例子是exp(3)相比e**3

>>> exp(3) 
20.085536923187668 
>>> e**3 
20.085536923187664 

但是現在發現,如果指數是一個float值:

>>> exp(3.1) 
22.197951281441636 
>>> e**3.1 
22.197951281441632 

這是罰款。現在的第一個例子:

>>> 1e3.1 
    File "<stdin>", line 1 
    1e3.1 
     ^
SyntaxError: invalid syntax 
>>> 10**3.1 
1258.9254117941675 

這說明Python不喜歡1e3.1Fortran了。不管它可能是一個標準(!)爲什麼它是這樣的?

+3

爲什麼使用Visual Basic'''作爲註釋字符,這在任何其他非瘋語言用於字符串?這正是語言設計者想要的。如果你想咆哮,咆哮他們。 – 2013-05-11 04:44:25

+1

@MarcB認爲總是積極的,那麼你會發現問題背後的重點。你的例子'''不相關! – Developer 2013-05-11 05:15:48

+0

其中一個我不明白爲什麼我不允許爲'218'寫'2(1.5)3'。 – 2013-05-11 13:44:37

回答

12

帶有e的符號是數字文字,是許多編程語言的詞彙語法的一部分,基於標準格式/科學記數法。

該表示法的用途是允許您通過移動點位置來指定非常大/小的數字。它的目的不是讓您將乘以10的任意冪乘以數字文字。因此,該點和下列數字甚至不被識別爲數字文字標記的一部分。

如果你想要任意的權力,正如你發現的那樣,有數學功能和操作員來完成這項工作。與數字文字不同,您甚至可以在運行時確定參數值。

4

您似乎正在爲文字與運算符混合使用語法。雖然你可以聲稱1e3.1遵循你的「慣例」,但應該很清楚的是,1e3.1對Python中間人來說不是一個有效的文字表達式。該語言具有定義的標準語法,並且該語法不支持浮點字面表達式作爲其數字文字的「指數」。

Python數字文字中的「e」不是一個運算符(小數點以上)。所以你期望Python的文字語法應該支持一些「慣例」......根據你所預言的某種模式......並不是特別合理。

+0

謝謝+一個upvote。顯然這只是一個已經達成的協議,否則,編譯器將1e3.1'識別爲一個數字並不難。順便說一句,'Fortran'是一樣的。 – Developer 2013-05-11 05:12:05

+0

我們的答案在'網絡中傳遞。即使它出現在我的上面,我看到你的信息發佈後我仍然進來。 – 2013-05-11 05:14:34

3

docs

sign   ::= '+' | '-' 
digit   ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' 
indicator  ::= 'e' | 'E' 
digits   ::= digit [digit]... 
decimal-part ::= digits '.' [digits] | ['.'] digits 
exponent-part ::= indicator [sign] digits   #no dots allowed here 
+0

不錯+ upvote。順便說一句,'Fortran'是一樣的。如果你能解釋'爲什麼'會更好。 – Developer 2013-05-11 05:13:26

+0

@開發人員編程語言試圖堅持[IEEE浮點](http://en.wikipedia.org/wiki/IEEE_floating_point)標準,該標準指出指數部分必須是整數。 – 2013-05-11 05:31:28

+0

感謝您的指點和鏈接,Ashwini。 – Developer 2013-05-11 07:01:10

相關問題