2013년 9월 10일 화요일

논리 연산자, 관계 연산자

From Evernote:

논리 연산자, 관계 연산자

논리 연산자
논리형은 두 가지 값만을 가질 수 있다. .true. 또는 .false.
논리형에 대한 연산은 논리 연산자를 사용한다.
  • .not.
  • .and.
  • .or.
  • .eqv.
  • .neqv.


관계 연산자
관계 연산자는 두 표현식을 비교하는 연산자이다.

  • <
    작다.
  • <=
    작거나 같다.
  • >
    크다.
  • >=
    크거나 같다.
  • ==
    같다.
  • /=
    같지 않다.


논리식
논리식의 결과는 .true. 또는 .false. 이다.

만일, 두 실수형의 값을 비교하는 경우에는 주의해야 하는데, 컴퓨터가 실수값을 표현하는데 있어서 그 정밀도가 유한하기 때문이다. 이런 경우에는 두 실수 값을 직접 비교( a == b )하기 보다는 두 값의 차이가 허용 오차 이내인지를 판별하는 것이 좋다.

real, parameter :: delta = 0.000001
abs(a -b) < delta ! a와 b의 값이 거의 같다면 .true. 

abs는 매개변수로 주어진 값의 절대값을 반환하는 함수이다.









산술 연산자

From Evernote:

산술 연산자

  • **    
    거듭제곱
  • *       
    곱하기
  • /        
    나누기
  •       
    더하기
  • -        
    빼기

산술 연산자의 우선 순위는 ** > *, / > +, - 순이다. 

물론, 괄호를 사용하면 우선순위를 바꿀 수 있다. 예를 들어,
3 * 2 + 1
은 7이지만,
3 * (2 + 1)
은 9이다.

우선 순위가 같은 경우에는 왼쪽의 연산자가 먼저 계산된다. 예를 들어,
a * b / c
의 경우에 a * b가 먼저 계산된 후의 결과값을 c로 나눈다.

하지만, 거듭제곱의 경우에는 오른쪽의 연산자가 먼저 계산된다. 예를 들어,
2 ** 2 ** 3
은 2 ** 8 이지, 4 ** 3이 아니다.


 
산술식
정수의 나눗셈(나누는 수와 나누어지는 수가 모두 정수인 경우)인 경우 그 결과는 항상 0에 가까운 정수값이 된다.

정수의 나눗셈 결과를 실수형으로 받으려면 real 함수를 사용해야 하는데, 이 함수는 매개변수로 받은 값을 실수형으로 변환한다. real(2)는 2.0이라는 실수형 값이 된다.

val = real(2) / 3 ! = 1.5
val = 2 / real(3) ! = 1.5
val = real(2/3) ! = 0 (이 경우, 2/3이 먼저 계산되므로 최종 결과는 0이 된다.)


서로 다른 자료형의 값을 산술 연산하는 경우에, 먼저 약한 자료형이 강한 자료형으로 변환된 후에 연산이 수행되며, 결과 값은 강한 자료형이 된다. 자료형이 강한 순서는 복소수형 > 실수형 > 정수형의 순서이다.
따라서, real(2) / 3의 경우에 3이 먼저 실수형으로 변환된 후에 나눗셈 연산이 수행된다.