컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Saturday, January 20, 2007

Java/자바] log2 (밑이 2인 로그 함수), log (ln), log10(상용 로그) 구하기


자바에는 자연로그(Natural Logarithm)를 구하는 log() 함수와, 밑(Base)이 10인 상용 로그를 구하는 log10() 함수만 있기에,

밑이 2인 로그 등을 구하려면 직접 함수를 만들어야 합니다. 아래 예제에 logB() 라는 메소드(함수)가 있는데

logB(숫자, 밑)

이런 형식으로 임의의 실수를 밑으로 지정할 수 있습니다.


자연로그, 상용로그, 밑(Base)이 2인 로그 계산 예제


파일명: Foo.java
public class Foo {
  public static void main(String[] args) {


    System.out.format("  자연 로그 :%n%n");

    for (double d = 1.0; d <= 10.0; d++)
      System.out.format("   ln(%2.0f) = %.16f%n", d, Math.log(d));




    System.out.format("%n%n%n  상용 로그 :%n%n");

    for (double d = 1.0; d <= 10.0; d++)
      System.out.format("log10(%2.0f) = %.16f%n", d, Math.log10(d));




    System.out.format("%n%n%n  밑이 2인 로그 :%n%n");

    for (double d = 1.0; d <= 10.0; d++)
      System.out.format(" log2(%2.0f) = %.16f%n", d, logB(d, 2.0));

  }




  public static double logB(double x, double base) {
    return Math.log(x) / Math.log(base);
  }


}



위의 예제 컴파일 및 실행 결과 화면:
D:\Z>javac Foo.java && java Foo
  자연 로그 :

   ln( 1) = 0.0000000000000000
   ln( 2) = 0.6931471805599453
   ln( 3) = 1.0986122886681096
   ln( 4) = 1.3862943611198906
   ln( 5) = 1.6094379124341003
   ln( 6) = 1.7917594692280550
   ln( 7) = 1.9459101490553132
   ln( 8) = 2.0794415416798357
   ln( 9) = 2.1972245773362196
   ln(10) = 2.3025850929940460



  상용 로그 :

log10( 1) = 0.0000000000000000
log10( 2) = 0.3010299956639812
log10( 3) = 0.4771212547196624
log10( 4) = 0.6020599913279624
log10( 5) = 0.6989700043360189
log10( 6) = 0.7781512503836436
log10( 7) = 0.8450980400142568
log10( 8) = 0.9030899869919435
log10( 9) = 0.9542425094393249
log10(10) = 1.0000000000000000



  밑이 2인 로그 :

 log2( 1) = 0.0000000000000000
 log2( 2) = 1.0000000000000000
 log2( 3) = 1.5849625007211560
 log2( 4) = 2.0000000000000000
 log2( 5) = 2.3219280948873620
 log2( 6) = 2.5849625007211560
 log2( 7) = 2.8073549220576040
 log2( 8) = 3.0000000000000000
 log2( 9) = 3.1699250014423126
 log2(10) = 3.3219280948873626

D:\Z>



▶▶ Java/자바] 자연 로그의 밑 e 상수 구하기 출력; Natural Logarithm, Euler Constant

로그 계산기: ▶▶ 로그계산기; 로그값 구하기; 상용로그, 자연로그, 밑이 2인 로그; Log Calc






자연로그의 합계 구하기 예제

파일명: Foo.java
import java.util.Scanner;

public class Foo {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scan = new Scanner(System.in);
    System.out.print("구할 값을 입력하시오: ");
    int num = scan.nextInt();


    double sum = 0;

    System.out.println();

    for (double d = 1.0; d <= num; d++) {
      sum = sum + Math.log(d);
      System.out.format("ln(%4.0f) = %.16f%n", d, Math.log(d));
    }


    System.out.format("%nln(1)에서 ln("+num+")까지의 sum은 " + sum + " 입니다.%n");
  }

}

실행 결과 화면:
D:\Z>javac Foo.java && java Foo
구할 값을 입력하시오: 10

ln(   1) = 0.0000000000000000
ln(   2) = 0.6931471805599453
ln(   3) = 1.0986122886681098
ln(   4) = 1.3862943611198906
ln(   5) = 1.6094379124341003
ln(   6) = 1.7917594692280550
ln(   7) = 1.9459101490553132
ln(   8) = 2.0794415416798357
ln(   9) = 2.1972245773362196
ln(  10) = 2.3025850929940460

ln(1)에서 ln(10)까지의 sum은 15.104412573075518 입니다.

D:\Z>




tag: java
자바 | Java

5 Comments:
At October 15, 2013 at 10:11 PM, Blogger Unknown said...

흠 혹시 Math.log(1000) / Math.log(10) 하면
2.9999999999999996 이렇게 나오지는 않겠죠..?

 
At October 15, 2013 at 10:48 PM, Blogger mwultong said...



2.9999999999999996 로 나오는 것은
System.out.format 의 정밀도가 16 이기 때문입니다.

3.00000000 으로 출력되게 하려면
정밀도를 8 정도로 %.8f 이렇게 하시면 됩니다.

예제::

public class Foo {
public static void main(String[] args) {

double d = Math.log(1000) / Math.log(10);

System.out.format("%.16f%n", d);
// 2.9999999999999996

System.out.format("%.8f%n", d);
// 3.00000000

}
}

 
At April 10, 2018 at 3:13 PM, Blogger 하드 said...

올려주신 자료로 ln(1)부터 ln(1000)까지 구하는 스크립트를 썼습니다.
궁금한 점은
ln(1)부터 ln(1000)까지 계산되어 나오는 각각의 값들을
누적더하기를 해야하는데
어떻게 해야할지 모르겠어서 질문 남깁니다.

아래는 제 생각으로 짜본건데 아예 오류부터 떠버리네요..
import java.util.Scanner;
public class Factorial {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("구할 값을 입력하시오.: ");
int num = scan.nextInt();

for (double d = 1.0; d <= num; d++)
System.out.format("ln(%2.0f) = %.16f%n", d, Math.log(d));

double sum = 0;

sum = sum + %.16f%n;
System.out.println("ln("+num+"!"+")의 sum은" + sum + "입니다.");
}
}

 
At April 10, 2018 at 6:55 PM, Blogger mwultong said...

포스트 본문 끝에, 합계 구하기 소스를 업로드했습니다

 
At April 10, 2018 at 9:05 PM, Blogger 하드 said...

대학교 수업 과제인데 처음 하는거라 쩔쩔매고 있었습니다.
작성자님의 로그 구하는 포스팅과 또 친절하게 합계까지 구하는 법을 알려주셔서 진심으로 감사드립니다.
마지막으로 부탁드려보자 하는 심정으로 댓글은 단 거였는데.. 너무 감사드립니다.

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top