44 lines
927 B
Markdown
44 lines
927 B
Markdown
# Arithmetic Expression
|
|
|
|
Decodal supports arithmetic over concrete numeric values.
|
|
|
|
```dcdl
|
|
{
|
|
workers = 2 + 2;
|
|
timeout = 30.0 / 2;
|
|
port = 8000 + 80;
|
|
negative = -1;
|
|
}
|
|
```
|
|
|
|
## Operators
|
|
|
|
- `+` addition
|
|
- `-` subtraction
|
|
- `*` multiplication
|
|
- `/` division
|
|
- unary `-` negation
|
|
|
|
`*` and `/` bind tighter than `+` and `-`.
|
|
Parentheses can be used to make grouping explicit.
|
|
|
|
```dcdl
|
|
2 + 3 * 4 # 14
|
|
(2 + 3) * 4 # 20
|
|
```
|
|
|
|
## Numeric behavior
|
|
|
|
Arithmetic requires concrete `Int` or `Float` operands.
|
|
`Int + Int`, `Int - Int`, and `Int * Int` produce `Int` when no overflow occurs.
|
|
Mixed `Int` / `Float` arithmetic produces `Float`.
|
|
Division always produces `Float`.
|
|
|
|
Division by zero and integer overflow are evaluation errors.
|
|
|
|
Arithmetic expressions can be used anywhere a concrete numeric expression is expected, including defaults and numeric constraints.
|
|
|
|
```dcdl
|
|
port = Int & > 4000 + 42 default 8080;
|
|
```
|