> For the complete documentation index, see [llms.txt](https://vlsi-korea.gitbook.io/chase-tcl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vlsi-korea.gitbook.io/chase-tcl/4-math.md).

# 4장: 수식, math

### 1. 수학 표현식 개요

TCL의 수학 표현식은 숫자 계산을 수행하는 데 사용됩니다. `expr` 명령을 통해 평가됩니다.

**기본 구문:**

```tcl
expr 수식
```

### 2. 기본 연산자

* **덧셈:** `+`
* **뺄셈:** `-`
* **곱셈:** `*`
* **나눗셈:** `/`
* **모듈로 (나머지):** `%`
* **거듭제곱:** `**`

**예시:**

```tcl
puts [expr {5 + 3}]     # 출력: 8
puts [expr {10 - 4}]    # 출력: 6
puts [expr {3 * 4}]     # 출력: 12
puts [expr {20 / 4}]    # 출력: 5
puts [expr {17 % 5}]    # 출력: 2
puts [expr {2 ** 3}]    # 출력: 8
```

### 3. 비교 연산자

* **같음:** `==`
* **다름:** `!=`
* **크다:** `>`
* **작다:** `<`
* **크거나 같다:** `>=`
* **작거나 같다:** `<=`

**예시:**

```tcl
puts [expr {5 == 5}]    # 출력: 1 (참)
puts [expr {5 != 4}]    # 출력: 1 (참)
puts [expr {6 > 4}]     # 출력: 1 (참)
puts [expr {3 < 2}]     # 출력: 0 (거짓)
```

### 4. 논리 연산자

* **AND:** `&&`
* **OR:** `||`
* **NOT:** `!`

**예시:**

```tcl
puts [expr {(5 > 3) && (2 < 4)}]  # 출력: 1 (참)
puts [expr {(5 < 3) || (2 < 4)}]  # 출력: 1 (참)
puts [expr {!(5 < 3)}]            # 출력: 1 (참)
```

### 5. 비트 연산자

2진수 수준에서 비트를 연산합니다.

예를들어,

10진수 1은 1,

10진수2는 10,

10진수 4는 100입니다.

2진수 100을 '>>' 하면 비트가 하나씩 오른쪽으로 옮겨져 2진수 10이 됩니다.

* **AND:** `&`
* **OR:** `|`
* **XOR:** `^`
* **NOT:** `~`
* **왼쪽 시프트:** `<<`
* **오른쪽 시프트:** `>>`

**예시:**

```tcl
puts [expr {5 & 3}]     # 출력: 1
puts [expr {5 | 3}]     # 출력: 7
puts [expr {5 ^ 3}]     # 출력: 6
puts [expr {~5}]        # 출력: -6
puts [expr {1 << 3}]    # 출력: 8
puts [expr {8 >> 1}]    # 출력: 4
```

### 6. 수학 함수

TCL은 다양한 내장 수학 함수를 제공합니다:

* **절대값:** `abs(x)`
* **제곱근:** `sqrt(x)`
* **지수:** `exp(x)`
* **로그:** `log(x)`, `log10(x)`
* **삼각함수:** `sin(x)`, `cos(x)`, `tan(x)`
* **반올림:** `round(x)`
* **최대/최소:** `max(x,y)`, `min(x,y)`

**예시:**

```tcl
puts [expr {abs(-5)}]        # 출력: 5
puts [expr {sqrt(16)}]       # 출력: 4.0
puts [expr {round(3.7)}]     # 출력: 4
puts [expr {max(5, 10)}]     # 출력: 10
```

### 7. 변수 사용

수학 표현식 내에서 변수를 직접 사용할 수 있습니다:

```tcl
set x 5
set y 3
puts [expr {$x + $y}]  # 출력: 8
```

### 8. 주의사항 ⚠️

* 부동소수점 연산 시 정밀도 주의.
* 0으로 나누기 오류 주의
* 복잡한 표현식은 가독성을 위해 괄호 사용 권장

### 9. 여러 수학식 사용 및 계산 우선순위

TCL의 수학 표현식에서 연산자 우선순위는 일반적인 수학 규칙을 따릅니다. 우선순위가 높은 연산자가 먼저 계산됩니다.

우선순위 (높음에서 낮음 순):

1. `()` 괄호
2. `**` 거듭제곱
3. `*`, `/`, `%` 곱셈, 나눗셈, 나머지 연산
4. `+`, `-` 덧셈, 뺄셈
5. `<<`, `>>` 비트 시프트
6. `<`, `>`, `<=`, `>=` 비교 연산자
7. `==`, `!=` 동등성 비교
8. `&` 비트 AND
9. `^` 비트 XOR
10. `|` 비트 OR
11. `&&` 논리 AND
12. `||` 논리 OR
13. `?:` 삼항 연산자

**예시:**

```tcl
puts [expr {2 + 3 * 4}]     # 출력: 14 (3 * 4가 먼저 계산됨)
puts [expr {(2 + 3) * 4}]   # 출력: 20 (괄호 안이 먼저 계산됨)
puts [expr {1 + 2 * 3 ** 2}]  # 출력: 19 (3 ** 2 -> 2 * 9 -> 1 + 18 순서로 계산)
```

### 11. 팁과 요령 💡

* 복잡한 표현식은 괄호를 사용하여 의도를 명확히 표현. 리뷰어를 위해.
* 여러 수학식을 사용할 때는 각 식의 목적을 주석으로 설명
* 우선순위가 불분명한 경우 괄호를 사용하여 명시적으로 순서 지정
* 긴 표현식은 여러 줄로 나누어 가독성 향상
