2017-03-23 4 views
1

그래서, 내가 파이썬에 대해 잘 모르겠지만, 다음 코드의 결과가 0.367879441171자바 Math.exp()와 파이썬 math.exp()

from math import exp 

window = 10000 
td = 1 

print exp(-td/window) 

반면 자바 0.9999000049998333 결과 아래의 조각

import java.time.Clock; 
import java.time.Duration; 
import java.time.Instant; 

public class HelloWorld{ 
    public static void main(String []args){ 
     double td = 1d; 
     double window = 10000d; 

     System.out.println(Math.exp(- td/window)); 
    } 
} 

나는 이것들이 동등하지만 맹세 할 수는 없다. 누군가 내가 잘못하고있는 것을 설명 할 수 있습니까?

파이썬 코드 : http://www.tutorialspoint.com/execute_python_online.php?PID=0Bw_CjBb95KQMcXRkLUdXbHdBSEU
JavaCode
: http://www.tutorialspoint.com/compile_java8_online.php?PID=0Bw_CjBb95KQMeEZZZFJLdERMb0k

+0

지수 함수에 대해 많이 알지 못합니다. 그것이 문제이다. – duffymo

답변

5

파이썬 예는 정수 나누기를하고있다 :

print -td/window 

-1를 나타낸다. -1/10000 is zero 때문에, 이것은 당신이 int 변수를 사용하여, 자바에서 동등한를 쓴 경우에 다릅니다 :

int window = 10000; 
int td = 1; 
System.out.println(-td/window); 

0을 보여줍니다.

나는 Python always rounds down을 결코 알아 채지 못했기 때문에 파이썬 동작이 나를 놀라게한다.

그러나 자바에서 정확히 같은 것을하지 않았 으면, 부동 소수점 나누기를 수행한다는 것을 의미하는 두 개의 double을 나눈 것입니다.

파이썬에서 float로 td를 캐스팅하려고 :

print -float(td)/window 

double를 사용하는 자바에 가깝다 -0.0001를 보여줍니다.

+3

파이썬은 버전 3.0에서 int/int division의 정의를 변경했다. 여전히 2.x를 사용하고 있다면'from __future__ import division'을 강력히 추천합니다. – dan04

+0

@ dan04가 어떻게 바뀌 었습니까? :) –

+2

이제는 합리적인 몫을 근사하는 'float'을 반환합니다. – dan04