2023/01 3

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