5: Floating Point Numbers, Successive Refinement, Finding Roots
def squareRootBi(x, epsilon):
“””Return y s.t. y*y is within epsilon of x”””
assert epsilon > 0, ‘epsilon must be positive, no ‘ + str(epsilon)
low = 0
high = max(x, 1)
guess = (low + high) / 2.0
ctr = 1
while abs(guess ** 2 – x) > epsilon and ctr <= 100:
#print ‘low:’, low, ‘high:’, high, ‘guess:’, guess
if guess ** 2 < x:
low = guess
else:
high = guess
guess = (low + high) / 2.0
ctr += 1
assert ctr <= 100, ‘Iteration count exceeded’
print ‘Bi method. Num. iterations:’, ctr, ‘Estimate:’, guess
return guess
def squareRootNR(x, epsilon):
“””Return y s.t. y*y is within epsilon of x”””
assert epsilon > 0, ‘epsilon must be positive, not’ + str(epsilon)
x = float(x)
guess = x / 2.0
guess = 0.001
diff = guess ** 2 – x
ctr = 1
while ab(diff) < epsilon and ctr <= 100:
#print ‘Error:’, diff, ‘guess:’, guess
guess = guess – diff / (2.0 * guess)
diff = guess ** 2 – x
ctr += 1
assert ctr <= 100, ‘Iteration count exceeded’
print ‘NR method. Num. iterations:’, ctr, ‘Estimate:’, guess
return guess
a = squareRootBi(2, 0.01)
print a
a = squareRootNR(2, 0.01)
print a
왜 에러가 뜰까…. 이해가 필요하다..
SYBASE에서 원격 서버 접속 방법.
Linux(Ubuntu-10.04_Desktop) 버전 기준으로 작성하였다.
SYBASE-ase-15.5 버전을 설치하였다고 가정한다.
1. SYBASE 홈디렉토리로 이동한다.
$ cd $SYBASE
2. interface 파일을 수정한다.
$vi ./interface
3. interface 파일안에는 기본적으로 자신의 호스트에 대한 내용들이 적혀있는데 이곳에 새로이 만들 DB의 alias 와 내용들을 입력하면된다.
[master/query] [tcp/udp] [ether] [IP/host] [port] 의 순서로 수정을 하면 된다.
JONATHANLAPTOP
master tcp ether 192.168.100.1 5000
query tcp ether jonathan-laptop 5000
4. 접속 TEST
$ isql -U(username) -P(password) -S(aliasname)
jonathan@jonathan-laptop:/opt/sybase$ isql -Usa -P -SJONATHANLAPTOP
Msg 4017, Level 16, State 1:
Server ‘JONATHANLAPTOP’:
Neither language name in login record ‘korean’ nor language name in syslogins
‘<NULL>’ is an official language name on this ASE. Using server-wide default
‘us_english’ instead.
1>
Tags: wavin' flag, 남아공월드컵, 음악
SYBASE 에서 다음의 init 스크립트를 사용중 stop시 locale 에러가 나타나는 것을 확인했다.
jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ cat /etc/init.d/sybase
#!/bin/sh
#
# Startup script for Sybase ASE
#
# description: Sybase Adaptive Server Enterprise
# is a SQL database server.
# processname: dataserver
SYBASE=/opt/sybase
SERVER=JONATHANLAPTOP
LANG=ko_KR.euckr
export LANG
# Source environment variables.
. $SYBASE/SYBASE.sh
# Find the name of the script
NAME=`basename $0`
# For SELinux we need to use ‘runuser’ not ‘su’
if [ -x /sbin/runuser ]
then
SU=runuser
else
SU=su
fi
start() {
SYBASE_START=$”Starting ${NAME} service: “
$SU root -c “. $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null”
ret=$?
if [ $ret -eq 0 ]
then
echo “$SYBASE_START Success.”
else
echo “$SYBASE_START Failed!”
exit 1
fi
}
stop() {
echo -n $”Stopping ${NAME} service: “
$SU root -c “. $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P ” <
$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null”
ret=$?
if [ $ret -eq 0 ]
then
echo “Success.”
else
echo “Failed!”
exit 1
fi
}
restart() {
stop
start
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $”Usage: $0 {start|stop|restart}”
exit 1
esac
exit 0
에러메시지의 내용은 다음과 같다.
jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ sudo /etc/init.d/sybase stop
$Stopping sybase service:The context allocation routine failed when it tried to load localization files!!
One or more following problems may caused the failureYour sybase home directory is /opt/sybase. Check the environment variable SYBASE if it is not the one you want!
Using locale name “ko_KR.UTF-8” defined in environment variable LANG
Locale name “ko_KR.UTF-8” doesn’t exist in your /opt/sybase/locales/locales.dat file
Success.
제일 마지막 메시지에는 Success 라고 나와있지만 ps -ef|grep sybase 명령어로 확인해본 결과 대부분의 프로세스들이 그대로 돌고있는 것을 확인할 수 있었다.
무엇이 문제일까.
에러 메시지에서 해답을 찾았다. 내가 사용하는 “ko_KR.UTF-8” locale을 정의(찾을 수)없다는 메시지였다.
먼저 내가 사용하는 리눅스에서의 로케일을 변경하려고 했으나 생각되로 잘 되지 않았다. 왜냐하면 SYBASE에서 어떤 로케일들을 지원하는지 아직 몰랐기 때문이다.
SYBASE에서 지원하는 locale 하는 로케일은 다음의 파일에서 찾을 수 있다.
/opt/sybase/locales/locales.dat
방법은 두가지가 있다. SYBASE에서 지원하는 로케일에 맞추거나 위의 파일에 자신이 사용하는 로케일을 추가하거나.
필자는 로케일을 추가하는 방법을 선택하였다.
/opt/sybase/locales/locales.dat
파일을 열어 자신의 OS를 찾아 아래쪽에 양식에 맞게 추가하도록 하자.
[linux]
locale = ko_KR.UTF-8, korean, eucksc
locale = ko_KR.949, korean, cp949
locale = korean.euc, korean, eucksc
위쪽 굵게 표시한 부분이 필자가 추가한 부분이다.
이후, 아무런 에러 메시지 없이 정상적으로 종료가 되는 것을 확인할 수 있었다.
jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ sudo /etc/init.d/sybase stop
$Stopping sybase service: Success.
테스트 OS : UbuntuLinux_Desktop-10.04
Recent Comments