为啥带有十进制值的指数表示法会失败? [关闭]
Posted
技术标签:
【中文标题】为啥带有十进制值的指数表示法会失败? [关闭]【英文标题】:Why does exponential notation with decimal values fail? [closed]为什么带有十进制值的指数表示法会失败? [关闭] 【发布时间】:2013-05-11 04:42:02 【问题描述】:通常1e3
表示10**3
。
>>> 1e3
1000.0
>>> 10**3
1000
与e**3
相比,exp(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.1
,Fortran
。
不管它可能是一个标准(!)为什么会这样?
【问题讨论】:
为什么 Visual Basic 使用'
作为注释字符,而在任何其他非疯狂语言中,它用于字符串?这就是语言设计者想要的方式。想骂就骂他们。
@MarcB 总是积极思考,然后你会注意到问题背后的要点。您的示例 '
不相关!
我,一方面,不明白为什么我不允许为218
写2(1.5)3
。
【参考方案1】:
e
的符号是数字文字,是许多编程语言的词法语法的一部分,基于标准形式/科学符号。
此符号的目的是允许您通过移动点位置来指定非常大/小的数字。它并不是为了让您将乘以 10 的任意幂的乘法编码为数字文字。因此,该点和后面的数字甚至不被识别为数字文字标记的一部分。
如果您想要任意幂,正如您所发现的,可以使用数学函数和运算符来完成这项工作。与数字文字不同,您甚至可以在运行时确定参数值。
【讨论】:
【参考方案2】:您似乎将文字的语法与运算符混为一谈。虽然您可以声称 1e3.1 遵循您的“约定”,但应该很清楚 1e3.1 不是 Python 解释器的有效文字表达式。该语言具有已定义的标准语法,并且该语法不支持将浮点文字表达式作为其数字文字的“指数”。
Python 数字文字中的“e”不是运算符(小数点除外)。所以你期望 Python 的文字语法应该支持一些“约定”......基于你猜到的一些模式......并不是特别合理。
【讨论】:
谢谢+一票。显然这只是一个已经完成的协议,否则,编译器将1e3.1
识别为数字并不难。顺便说一句,Fortran
也是一样。
我们的答案在“网络”中传递。我看到你的在我的发布后进来了,即使它出现在我的上方。【参考方案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
【讨论】:
不错+点赞。顺便说一句,Fortran
也是如此。如果你能尝试解释一下会更好why
。
@Developer 编程语言尝试遵守IEEE floating point 标准,即指数部分必须是整数。
感谢您的指出和链接,Ashwini。以上是关于为啥带有十进制值的指数表示法会失败? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Android十进制格式,如何根据不同的指数值进行十进制格式?