2016년 8월 1일 월요일

Julia 연습 4

In [ ]:
#
# 나는 julia 를 사랑하는가.
#
In [ ]:
#
# arithmetic operators
#
# 산술 연산자
#
# 산술 연산자를 알아보자.
#
In [1]:
# 이런건 익숙하다.

1 + 2 + 3
Out[1]:
6
In [2]:
1 - 2
Out[2]:
-1
In [3]:
3*2/12
Out[3]:
0.5
In [4]:
#=

~ : bitwise not
& : bitwise and
| : bitwise or
$ : bitwise xor
>>> : logical shift right
>> : arithmetic shift right
<< : logical/arithmetic shift left

=#


~123
Out[4]:
-124
In [5]:
123 & 234
Out[5]:
106
In [6]:
123 | 234
Out[6]:
251
In [7]:
123 $ 234
Out[7]:
145
In [8]:
~UInt32(123)
Out[8]:
0xffffff84
In [9]:
~UInt8(123)
Out[9]:
0x84
In [10]:
#
# updating operators
# 갱신 연산자
#
# x += 3 은 x = x + 3 과 같다.
#

x = 1
Out[10]:
1
In [11]:
x += 3
Out[11]:
4
In [12]:
x
Out[12]:
4
In [13]:
#=

+= -= *= /= \= ÷= %=
^= &= |= $= >>>= >>= <<=


=#
In [14]:
x = 0x01; typeof(x)
Out[14]:
UInt8
In [15]:
# 계산결과, type 이 바뀔수 있다.

x *= 2 # x = x * 2 와 같다.
Out[15]:
2
In [16]:
# UInt8 이 아니다!

isa(x, Int)
Out[16]:
true
In [17]:
# UInt8 이 Int64 로 바뀌었다!

typeof(x)
Out[17]:
Int64
In [18]:
# 비교

#=

== : 같은가
!= ≠ : 다른가
< : 작은가
<= ≤ : 작거나 같은가
> : 큰가
>= ≥ : 크거나 같은가


=#


1 == 1
Out[18]:
true
In [19]:
1 == 2
Out[19]:
false
In [20]:
1 != 2
Out[20]:
true
In [21]:
1 == 1.0
Out[21]:
true
In [22]:
1 < 2
Out[22]:
true
In [23]:
1.0 > 3
Out[23]:
false
In [24]:
1 >= 1.0
Out[24]:
true
In [25]:
-1 <= 1
Out[25]:
true
In [26]:
-1 <= -1
Out[26]:
true
In [27]:
-1 <= -2
Out[27]:
false
In [28]:
3 < -0.5
Out[28]:
false
In [29]:
# NaN 은 자기자신과도 같지 않다!

NaN == NaN
Out[29]:
false
In [30]:
# NaN 은 자기자신과도 같지 않다!

NaN != NaN
Out[30]:
true
In [31]:
# NaN 은 자기자신보다 작지 않다.

NaN < NaN
Out[31]:
false
In [32]:
# NaN 은 자기자신보다 크지 않다.

NaN > NaN
Out[32]:
false
In [33]:
# 이런 NaN 의 성질때문에 다음 두 배열은 서로 다르다.
# 놀랍다!

[1 NaN] == [1 NaN]
Out[33]:
false
In [34]:
# isequal() 함수는 NaN 을 서로 같은것으로 간주해준다.

isequal(NaN, NaN)
Out[34]:
true
In [35]:
# 두 배열을 같은것으로 판정해준다.

isequal( [1 NaN], [1 NaN])
Out[35]:
true
In [36]:
isequal( NaN, NaN32)
Out[36]:
true
In [37]:
# 이것은 서로 같다고 판정한다.

-0.0 == 0.0
Out[37]:
true
In [39]:
# 이것은 서로 다르다고 파정한다.
#
# 부호있는 영(0) 을 구분해주는 역할을 한다.

isequal( -0.0, 0.0)
Out[39]:
false
In [40]:
# Chaining comparisons
# 연쇄 비교

1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5
Out[40]:
true
In [41]:
# v(2) 는 한번만 실행된다.
# 실행순서는 정의되지 않았다.
# 따라서, 부작용(side effect) 이 있는 함수를 
# 연쇄 비교에서 사용하지 말것.

v(x) = (println(x); x)

v(1) < v(2) <= v(3)
2
1
3
Out[41]:
true
In [42]:
# Short-Circuit Evaluation
# 기능이 있다.
# 이미 false 가 판정되었으므로,
# v(3) 는 실행하지 않아도, 전체결과는 false 가 확실하다.

# 따라서, 만약 v(3) 함수에 반드시 실행해야하는 기능이 있다면
# 연쇄 비교문을 쓰지 말것.

# 연쇄비교는 모양은 이쁘지만
# 실행순서가 보장되지 않고
# short-circuit evaluation 때문에 
# 아예 실행되지 않을 수도 있다.

v(1) > v(2) <= v(3)
2
1
Out[42]:
false
In [43]:
# Numerical Conversions
#
# 숫자형 변환

Int8(127)
Out[43]:
127
In [44]:
# 이것은 형변환이 안된다.

Int8(128)
LoadError: InexactError()
while loading In[44], in expression starting on line 1

 in call at essentials.jl:56
In [45]:
Int8(127.0)
Out[45]:
127
In [46]:
# 이것은 형변환이 안된다.

Int8(3.14)
LoadError: InexactError()
while loading In[46], in expression starting on line 1

 in call at essentials.jl:56
In [47]:
# 이것은 형변환이 안된다.

Int8(128.0)
LoadError: InexactError()
while loading In[47], in expression starting on line 1

 in call at essentials.jl:56
In [48]:
127 % Int8
Out[48]:
127
In [50]:
typeof(ans)
Out[50]:
Int8
In [51]:
128 % Int8
Out[51]:
-128
In [52]:
typeof(ans)
Out[52]:
Int8
In [53]:
round(Int8, 127.4)
Out[53]:
127
In [54]:
# 이것은 형변환이 안된다.

round(Int8, 127.6)
LoadError: InexactError()
while loading In[54], in expression starting on line 1

 in trunc at float.jl:374
 in round at float.jl:181
In [ ]:
#=

round
floor
ceil
trunc

...

Julia 는
삼각함수, 로그함수, 지수함수, 특수함수 등의 기본함수를 제공한다.


=#

Firefly Algorithms

firefly algorithm 001 Firefly Algorithms ¶ 반딧불 알고리즘 번역 요약 ¶ References [1] X. S. Y...