2013-05-11 2 views
3

통상적으로는 1e3은 을 의미한다.십진수 값의 지수 표기법이 실패하는 이유는 무엇입니까?

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

비슷한 경우 e**3 비교 exp(3)이다. 괜찮

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

: 지수가 float 값이면

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

그러나 이제 알. 이제 첫 번째 예 : Python을 보여줍니다

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

1e3.1, Fortran을 좋아하지 않는다. 관계없이 표준이 될 수 있습니다 (!) 왜 그런가요?

+3

이유는 무엇입니까 Visual Basic에서 사용''다른 비 미친 언어로 문자열에 사용되는 주석 문자, 등? 언어 디자이너가 원하는 방식입니다. 너가 호언 장담하고 싶으면, 그들에 호언 장담 하십시요. –

+1

@MarcB 항상 긍정적 인 생각을하면 문제의 핵심을 알 수 있습니다. 당신의 예'''는 적합하지 않습니다! – Developer

+0

필자는 왜 '218'에'2 (1.5) 3 '을 쓸 수 없는지 모르겠다. –

답변

12

e의 표기법은 표준 형식/과학 표기법을 기반으로하는 많은 프로그래밍 언어의 어휘 구문의 일부인 숫자 리터럴입니다.

이 표기법의 목적은 점 위치를 이동하여 매우 큰/작은 숫자를 지정할 수있게하기위한 것입니다. 그것은 당신이 10의 임의의 거듭 제곱으로 곱셈을 숫자 리터럴로 인코딩 할 수 있도록하기위한 것이 아닙니다. 따라서이 지점과 그 이후의 숫자는 숫자 리터럴 토큰의 일부로 인식되지 않습니다.

당신이 발견 한 것처럼 임의의 힘을 원한다면, 그 일을하는 수학 함수와 연산자가 있습니다. 숫자 리터럴과 달리 런타임에 매개 변수 값을 결정할 수도 있습니다. docs에서

4

연산자가있는 리터럴 구문이 서로 다른 것 같습니다. 1e3.1이 "convention"을 따르고 있다고 주장 할 수 있지만, 1e3.1은 파이썬 인터 피터에게 유효한 리터럴 표현이 아닙니다. 언어에는 정의 된 표준 문법이 있으며이 문법은 부동 소수점 리터럴 식을 숫자 리터럴의 "지수"로 지원하지 않습니다.

파이썬 숫자 리터럴의 "e"는 연산자가 아닙니다 (소수점 이상). 그래서 파이썬의 리터럴 구문이 당신이 생각한 어떤 패턴을 기반으로 한 몇몇 "컨벤션"을 지원해야한다는 당신의 기대는 ... 특히 적당하지 않습니다.

+0

감사 + 하나 upvote. 분명히 그것은 이미 합의 된 것일뿐입니다. 그렇지 않으면 컴파일러에 의해 숫자로 '1e3.1'을 인식하는 것이 그렇게 어렵지 않을 것입니다. BTW는'포트란'에서 동일합니다. – Developer

+0

답변은 '그물'로 전달됩니다. 내가 내 위에 나타난 것처럼 내 것이 게시 된 후에 나는 너를 보았다. –

3

:

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. BTW는'포트란'에서 동일합니다. 왜 '왜'를 설명 할 수 있다면 더 좋을 것입니다. – Developer

+0

@ 개발자 프로그래밍 언어는 [IEEE 부동 소수점] 표준 (http://en.wikipedia.org/wiki/IEEE_floating_point) 표준을 따르려고합니다. 지수 부분은 정수 여야합니다. –

+0

포인트와 링크 Ashwini에 감사드립니다. – Developer

관련 문제