프로그래밍/Python 49

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

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

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

wxPython을 이용한 간단한 웹 브라우저 소스 몇 가지

wx,html 모듈을 이용하는 첫째 소스는 http 프로토콜만 지원하고 https 프로토콜은 지원하지 않습니다. 그러나, wx,html2 모듈을 이용하는 둘째 소스는 http 프로토콜과 https 프로토콜 모두를 지원합니다. 셋째 소스는 둘째 소스에 네비게이터(뒤로 가기, 앞으로 가기) 가능을 추가한 소스입니다. [1] wx.html 모듈을 이용한 소스: simple_html_browser.py # -*- coding: utf-8 -*- #!/usr/bin/env python # Filename: simple_html_browser.py # Execute: python simple_html_browser.py # or # Execute: ./simple_html.browser.py import wx im..

wxPython 4.1.1 (현재 최신 버전) 설치하기

최근(2020년 11월 21일)에 릴리즈 4.1.1이 발표되었습니다. C++ 언어로 작성된 wxPython은 Python2 와 Python3 모두에 사용가능한 Python의 GUI 래퍼(wrapper)입니다. [1] wxPython 홈페이지 [2] wxPython 4.1.1 설치하기 처음 설치 명령: pippip install wxPython==4.1.1 업그레이드 명령: pippip install --upgrade wxPython==4.1.1 [3] 설치 후 버전 확인하기 >>> import wx >>> wx.version() '4.1.1 msw (phoenix) wxWidgets 3.1.5' >>> wx.__version__ '4.1.1' [4] 설치된 wxPython의 버전을 확인하는 GUI 소스 ..

PyGTK 릉 이용한 RPN 계산기

다음은 Pythob 2.7.* 에 PyGTK 를 설치하여 실행되는 RPN 계산기 소스이다. #!/usr/bin/env python # Filename: rpnCalc.py # 0,3 # # RPN Calculator using PyGTK # Modified from PyGTK/example/textview-basic.py import pygtk pygtk.require('2.0') import gtk class TextViewExample: def callback(self, widget, data=None): print "Hello again - %s was pressed" % data if data != None: self.textbuffer.insert(self.textbuffer.get_end_it..

Python 3.3.5 및 3.4.1 에 IPython 과 Matplotlib 설치하기

현재 Python 3.3 의 최신 릴리즈는 3.3.5 이고, Python 3.4 의 최신 릴리즈는 3.3.1 이다. 또한 IPython 의 최신 릴리즈는 2.1.0 이다. 여기서는 윈도우용 Python 3.3.5 를 설치한 후 IPython 2.1.0 을 설치하여 사용하는데 문제가 많아 그 한 해결법을 제시한다.'(윈도우용 Python 3.4.1 의 경우에는 IPython 2.1.0 이 무리 없이 잘 설치된다.) 이 글에서 IPython 을 포함하여 모든 Python 확장 모듈의 설치는 모두 Unofficial Windows Binaries for Python Extension Packages 의 것을 내려받아 설치하는 것으로 간주한다. 우선 Python 3.3.5 인터프리터를 실행해 본다. 프롬프트> ..

Python 버전 알아내기

Pytghon 스크립트로 버전을 알아내는 방법 중에 하나는 import sys sys.version_info 를 이용하는 것이다. * Pyhoin 3.3 의 경우 Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.version_info sys.version_info(major=3, minor=3, micro=3, releaselevel='final', serial=0) >>> sys.version_info > (2, 4..

pyqtgraph 를 이용한 그래프 그리기 예제

* pyqtgraph 내려받기 * 예제 소스 (극곡선 r = 2 cos(3 theta) 그리기) # -*- coding: utf-8 -*- # Filename: testPyQtGraph_03.py # Execute: python testPyQtGraph_03.py from pyqtgraph.Qt import QtGui, QtCore import numpy as np import pyqtgraph as pg app = QtGui.QApplication([]) win = pg.GraphicsWindow(title="Basic plotting examples") win.resize(400, 500) win.setWindowTitle('pyqtgraph example: Plotting') # Enable ant..

PySide 를 이용한 UI 예제

** PySide 설치하기 ** QtDesigner 내려받기 ** 윈도우즈 용 git 를 설치하기 * 다음 소스는 http://qt-project.org/wiki/PySideSimplicissimus_Module_2_CloseButton 에서 볼 수 있는 소스이다. #!/usr/bin/env python # quitter.py - provide a button to quit this "program" import sys from PySide.QtGui import QMainWindow, QPushButton, QApplication from ui_quitter import Ui_MainWindow class MainWindow(QMainWindow, Ui_MainWindow): def __init__(s..