프로그래밍 605

다시 생각해 보는 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) 가 있는데 이들은 타입 캐스팅할 댸 주의해야 할 부분이 있다. 아..

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

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

프로그래밍/C++ 2023.03.19

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

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

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

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

프로그래밍/C 2023.03.19

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

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

프로그래밍/C# 2023.03.19

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

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

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 /..

Python의 math.floor() 함수에 대한 문제점(?) 고찰

10**100 을 7로 나누고 다시 7을 곱해 보았습니다. math.floor() 함수는 유효숫자의 개수 때문에 오차가 좀(?) 많네요. (float 인스턴스).as_integer_ratio() 메서드로도 확인해 보았습니다. >>> import math >>> help(math.floor) Help on built-in function floor in module math: floor(x, /) Return the floor of x as an Integral. This is the largest integer >> math.floor(1.0/7*1.0E100)*7 999999999999999991619529956938304660342807021100541805948047267623039861569382..

0.1 + 0.2 의 계산 결과가 0.3 이 되게 하기

어떤 프로그램 언어를 쓰든 0.1 + 0.2 ≠ 0.3 이 되는 것이 당연(?)합니다. 또한 1.0/(0.1 + 0.2 - 0.3) ≠ ∞ 이 되는 것도 당연(?)합니다. >>> 0.1 + 0.2 - 0.3 5.551115123125783e-17 >>> 0.1 + 0.2 - 0.3 > 1.0E-17 True >>> 0.1 + 0.2 - 0.3 > 1.0/10E17 True 0.1 + 0.2 - 0.3 이 1.0E-17 즉 0.000000000000000001 보다 크다고 합니다. 이래 가지고서는 부동소수점수의 계산 결과를 어디 까지 믿을 수 있는지 의문입니다. (보통으로는 배정밀도 부동소수점수는 유효수자 개수가 14개~15개 정도입니다.) 다행히 Python 의 fractions 모듈과 decimal 모..

부동소수점수의 소수점 아래에 홑 따옴표 문자 ' 붙여서 가독성 높이기

부동소수점수에 '를 붙이면 가독성이 좋아 실수를 덜 합니다. 아래의 소스는 MSVC 와 g++ 로 잘 컴파일되고 동일한 실행 결과를 얻습니다. // Filename: test_cpp_literal.cpp // // Compile: cl /utf-8 /EHsc test_cpp_literal.cpp // Execute: test_cpp_literal // // Or // // Compile: g++ -o test_cpp_literal test_cpp_literal.cpp // Execute:./test_cpp_literal // // Output: // pie = // 3.14159 // 3.14159 // 3.141593 // 3.141593e+00 // // pie = // 3.141593 // 3.14..

프로그래밍/C++ 2023.01.03