프로그래밍/Java 36

다시 생각해 보는 Java 의 Native Number

Java 에는 부호 없는 native 정수 타입이 없다. Java 8에 와서야 부호 없는 정수를 처리하기 위한 메서드 몇 개가 추가되었다. 예를 들어, String을 native 타입 number로 변환하는 스태틱 메서드 Long.parseUnsignedLong(String), Integer.parseUnsignedint(String), Short.parseUnsignedShort(String), Byte.parseUnsignedByte(String), 들과 역으로 native 타입 number를 String으로 변환하는 스태틱 메서드 Long.toUnsignedString(long), Integer.toUnsignedString(int) 가 있는데 이들은 타입 캐스팅할 댸 주의해야 할 부분이 있다. 아..

Java 언어에서 큰 부동소수점수(native double)의 정확도

정수부의 자리수가 조금 큰 부동소수점수(64비트 double 포맷의 수)를 십진수 표현으로 출력해 보았습니다. 십진수로 표현하면 유효자리수 개수가 약 14~15개 정도인데, 17개로 자르고 그 뒤는 모두 0으로 출력합니다. C# 의 것과 비슷하지만 자르는 유효수자 개수가 다릅니다. Pyhon 이나 C/C++ 의 경우는 자르지 않고 소수점 위 부분을 모두 출력합니다. 물론 Java, C#, Python, C, C++ 어느 프로그램 언어든 십진수로 표현할 때 자르는 방법이나 유효수자 아래 부분을 채우는 방법은 다르지만, 덧셈, 뺄셈, 곱셈, 나누셈, 기타 등등에서 유효수자 아래부분의 처리 결과는 대동소이합니다. // Filename: Test_Of_Native_Double_Precison_001.java /..

32bit 윈도우 10에 최신 JDK 1.8 Update 221 설치하기

/** * Filename: HelloHangulUTF8.java * * File Encoding: UTF8 * * Compile: javac HelloHangulUTF8.java * * Execute: java HelloHangulUTF8] * * Output: * Hello. world! * 안녕하세요? * * Version * Prompt> java -version * java version "1.8.0_221" * Java(TM) SE Runtime Environment (build 1.8.0_221-b11) * Java HotSpot(TM) Client VM (build 25.221-b11, mixed mode, sharing) * * os EnvironmenT: 32but Window 10 *..

한글 윈도우 8.1 의 Cygwin64 에서 javac 와 java 사용할 때의 인코딩 옵션

소스 파일 Hello.java 는 (BOM 마크 없는) UTF-8 인코딩으로 저장되어 있다. 디폴트 인코딩이 한글 윈도우 8.1 은 MS949 이고, Cygwin64 는 UTF-8 이다. (Cygwin64 의 LANG 환경변수는 컴파일과 실행에 별로 상관 없는 듯 하다.) Cygwin64 에는 자바가 설치되어 있지 않고 윈도우의 C:\Java7 폴더에 자바가 설치된 것으로 간주한다. $ export PATH=/cygdrive/c/Java7/bin:$PATH $ export JAVA_HOME=/cygdrive/c/Java7 $ echo $JAVA_HOME /cygdrive/c/Java7 $ which java /cygdrive/c/Java7/bin $ which javac /cygdrive/c/Java7/..

이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with Java

Java 언어 소스: // Filename: TestHexView03.java // // Compile: javac TestHexView03.java // Execute: java TestHexView03 [filename] // // Date: 2013. 7. 28. import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TestHexView03 { public static void printUsage() { System.out.println("java TestHexView03 [filename]"); } public static String toHex(byte b) { String s = ..

Java 언어로 간단한 피보나치 수 테이블 만들기

아래 처럼 피보나치(Fibonacci) 수 테이블을 출력하는 Java 소스이다. ------------------------------------------------- n F(n) ------------------------------------------------- 0 0 10 55 20 6,765 30 832,040 40 102,334,155 50 12,586,269,025 60 1,548,008,755,920 70 190,392,490,709,135 80 23,416,728,348,467,685 90 2,880,067,194,370,816,120 100 354,224,848,179,261,915,075 110 43,566,776,258,854,844,738,105 120 5,358,359,254..

Java 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기

음이 아닌 실수 A 의 평방근 sqrt(A) 를 구하는 Heron 의 방법: 반복함수 g(x) = (x + A/x) / 2 를 이용 실수 A 의 n제곱근 root(n, A) 를 구하는 Newton-Raphson 의 방법 반복함수 g(x) = ((n-1)*x + A/(x**(n - 1))) / n 를 이용 n = 2 인 경우에는 Newton-Raphson 의 방법이 Heron 의 방법과 동일하다. (참조. http://en.wikipedia.org/wiki/Newton's_method ) Java 언어에는 math.lang 패키지에 지수 계산 함수 Math.pow(double, double) 가 이미 구현되어 있다. 하지만 차후 필요한 데가 있을 것 같아서 이와 유사한 n 제곱 함수와 n 제곱근 함수를 구..

Java 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제

역삼각함수란 삼각함수의 역함수를 의미하고, 역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다. 수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, Java 언어에서는 java.lang.Math.asin(double) 메소드로 구현되어 있다. /* * Filename: TestArcSine.java * * Compile: javac -d . TestArcSine.java * Execute: java TestArcSine * * Date: 2013. 1. 1. * Copyright (c) pkim _AT_ scripts.pe.kr */ public class TestArcSine { public static double sin(double x) { double y = Math.sin(x); return..

감마함수(gamma function)의 값을 (유효수자 15자리 까지 정밀하게) 계산하는 Java 언어 소스

Lanczos 알고리즘은 Stirlng 공식에 의한 알고리즘 보다 정밀하며, 십진수로 유효숫자 약 15자리 까지는 정확하게 계산해 준다. 단지 exp 함수를 이용하는 부분에서는 exp, sin, pow 함수들의 구현에 따라 오차가 더 있을 수 있다. C 언어에는 long double 타입이 있어서 좀 더 정밀한 계산을 할 수 있지만. Java 언어에는 그렇지 못하여 그냥 double 타입을 사용하였다. 비교를 위해 아파치의 commons의 Math 라이브러라에서 지원하는 Gamma.logGamma 함수를 사용한 결과도 함께 출력하도록 하였다. (commons 라이브러리는 http://commons.apache.org/math/download_math.cgi 에서 다운로드할 수 있다. commons 2.2..

Java 와 근사공식을 이용한 PI/sqrt(12) 의 근사값 계산

근사 공식 \frac{\pi}{\sqrt{12}} = \sum^\infty_{k=0} \frac{(-3)^{-k}}{2k+1} 을 이용하여 근사값 계산하는 프로그램을 Java 언어로 작성해 보았다. /* * Filename: ApproximatePiOverSqrt12.java * * Compile: javac -d . ApproximatePiOverSqrt12.java * Execute: java ApproximatePiOverSqrt12 */ public class ApproximatePiOverSqrt12 { /* Using the series: \frac{\pi}{\sqrt{12}} = \sum^\infty_{k=0} \frac{(-3)^{-k}}{2k+1} BND : 급수에서 합할 항의 개수 */..