원하는 프로그래밍 언어로 아래 수식을 어떻게 풀 수 있습니까?고출력 및 배정도
(1-1/X)^Y
쉽지!
하지만 어떻게 X & Y가 매우 크고 X 때 약 >> Y예를 들어, 이 간단한 충분히 문제가 될 수 있지만, 전원을인가하기 전에 배정 밀도 문제를 해결 점점 내가 알아낼 수 없습니다 뭔가해야처럼
(1-1/X)^Y
where
X = 10^40
Y = 10^12
보인다.
원하는 프로그래밍 언어로 아래 수식을 어떻게 풀 수 있습니까?고출력 및 배정도
(1-1/X)^Y
쉽지!
하지만 어떻게 X & Y가 매우 크고 X 때 약 >> Y예를 들어, 이 간단한 충분히 문제가 될 수 있지만, 전원을인가하기 전에 배정 밀도 문제를 해결 점점 내가 알아낼 수 없습니다 뭔가해야처럼
(1-1/X)^Y
where
X = 10^40
Y = 10^12
보인다.
음, (1 - 1/X)^Y = exp(Y*log(1 - 1/X))
. 심지어 제를 사용하거나, X
이 매우 큰, 그리고 Y
보다 훨씬 큰 경우, 당신은
log(1 - 1/x) = -1/x -1/(2*X^2) + O(1/X^3)
으로 로그를 대략 수 X
이 Y
보다 훨씬 큰 경우
exp(-(Y/X+ Y/(2*X*X)))
을 계산 로그의 Taylor 계열의 네 번째 항이 필요할 수 있습니다.
사용 GNU Octave 계산은 대략 :
octave:1> x = 10^40
x = 1.0000e+40
octave:2> y = 10^12
y = 1.0000e+12
octave:3> (1-1/x)^y
ans = 1
octave:8> exp(-(y/x + y /(2*x*x)))
ans = 1
다니엘 피셔에 의해 계산이 올바른지 다만, 코드 을 사용 에서의 BigDecimal 자바을 exp(-(Y/X+ Y/(2*X*X)))
를 계산하는 것이다
public static void main(String[] args) {
BigDecimal x = new BigDecimal(10,MathContext.UNLIMITED).pow(40);
BigDecimal y = new BigDecimal(10,MathContext.UNLIMITED).pow(12);
BigDecimal twoXSquared = new BigDecimal(2,MathContext.UNLIMITED).multiply(x).multiply(x);
BigDecimal yDividedByTwoXSquared = y.divide(twoXSquared);
BigDecimal yDividedByX = y.divide(x);
BigDecimal exponent = new BigDecimal(-1,MathContext.UNLIMITED).multiply(yDividedByX.add(yDividedByTwoXSquared));
System.out.println(exponent.toEngineeringString());
BigDecimal result = new BigDecimal(Math.E,MathContext.UNLIMITED).pow(exponent.intValue());
System.out.println(result.toEngineeringString());
}
나는 그것이 언어에 의존한다고 믿는다 - 어떤 언어에서는, 당신이 고정 소수점 arithmeric을 구현하는 라이브러리를 사용할 것이라고 생각한다. ['BigDeci mal'] (http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html)을 참조하십시오. – amit
wolframalpha.com을 사용하여 X^Y 용어가없는 시리즈 표현으로 확장 한 다음 원하는 정확도를 얻기 위해 필요한만큼 일련의 조건을 계산하십시오. – mbeckish
closevoter에게 :이 주제는 어떻게 꺼져 있습니까? –