2011-09-18 5 views
-1

* 10^(- 20)을 곱하면 어떻게 될까요? 어떤 대수 함수도 찾을 수 없으므로 다른 것들이 있기를 바랍니다.매우 작거나 매우 큰 숫자를 곱하는 함수

+3

자바'범위를 커버 doubles' 사용할 것이다 4.9 * 10^-324 포지티브 또는 네거티브 1.7 * 10^(308)에 관한 것이다. 충분하니? 그렇다면 정상적인'*'연산자 만 사용할 수 있습니다. – Douglas

+2

그리고 Math 유틸리티 클래스에는 많은 로그 메소드가 있지만 더글라스의 설명을 지원합니다. 대답 인 경우 위 표를 사용합니다. –

+2

a에 1e-20을 곱하면 되겠습니까? –

답변

0

I은 ​​로그 함수를 사용하지 않을 내가 Math.pow

double d = a * Math.pow(10, -20); 
+1

Java는 부동 소수점 리터럴을 지원하므로 다음과 같이 작성할 수 있습니다.'a * 1.0e-20' – Douglas

1

계산을 위해 큰 값을 저장할 수있는 BigDecimal 클래스를 사용할 수 있습니다.

+1

왜이 답변은 1을 뺀 것입니까? OP에서 어디에서 부동 소수점 값을 언급합니까? 최근에 문제가 수정 되었습니까? 부동 소수점 숫자를 사용했다하더라도 매우 작은 숫자에 대한 계산을 수행하고 부동 소수점을 사용하면 BigDecimal과 같은 클래스를 사용하여 피할 수있는 많은 문제가 발생합니다. 정확성을 유지하고 부동 소수점 산술로 인해 발생하는 문제를 피하는 것이 중요합니다. – Asaf

+0

@JimLewis - 부동 소수점/복식으로 계산할 때 BigDecimal을 사용하는 것을 방지하지 않습니다. 반대로 float 및 double 유형을 사용하는 것이 훨씬 안전하고 함정이 줄어 듭니다. 여기 [here] (http://www.ibm.com/developerworks/java/library/j-jtp0114/) 또는 [here] (http://stackoverflow.com/questions/6320209/javawhy-should- we-use-bigdecimal- 대신 double-in-the-real-world) –

+0

@inistel : 원본 답변에서 링크의 첫 번째 문장에 잘못 읽었습니다. "이 클래스는 불변의 정수 값을 나타냅니다. 길이." 하지만 이제는 정수가 아닌 정수를 표현할 수 있음을 알았습니다. 나는 여전히 그것이 OP가 조사해야하는 해결책이 아니라고 생각한다. 그러나 나는 행복하게 downvote를 철회 할 것이다. –

3

Java doubles은 4.9 * 10^-324에서 1.7 * 10^308까지의 양수 또는 음수를 포함합니다. 숫자가 해당 범위에 맞고 부동 소수점 정밀도를 사용하면 기꺼이 * 연산자를 사용할 수 있습니다.

Math.log 방법에 대한 설명서는 here입니다.