> ## Documentation Index
> Fetch the complete documentation index at: https://docs.makkii.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# Function 式の文法

> f(x) 系ブロックが解釈する数式言語の演算子・関数・定数

Function ブロック（`f(x)`、`f(x,y,z)`、`f(x,y,z,w,a,b,c,d)`、Boolean 版）は、プロパティに設定した式文字列を評価します。この式は Lua ではなく、Stormworks 独自の小さな数式言語です。

<Warning>
  比較演算子（`< > == != <= >=`）と三項演算子（`?:`）は存在しません。数値の比較が必要な場合は、Threshold Gate や Greater Than などの比較ブロックを式の外側で使ってください。
</Warning>

## 使える文字

式で使える文字は数字・小数点・英小文字・演算子記号・括弧・カンマ・空白（読み飛ばされる）だけです。変数は `x, y, z, w, a, b, c, d` の小文字1文字で、対応する入力の数だけ使えます（`f(x)` なら `x` のみ、`f(x,y,z,w,a,b,c,d)` なら8つすべて）。

## 演算子

優先順位は低い順です。

| 演算子         | 説明                                                             |
| ----------- | -------------------------------------------------------------- |
| `\|`        | 論理和。非 0 を真として `1.0`/`0.0` を返す（主に Boolean Function で使用）         |
| `&`         | 論理積。同上                                                         |
| `+` `-`     | 加減算（二項）                                                        |
| `*` `/` `%` | 乗除・剰余。`%` は `fmod` 相当で商の符号は被除数に従う                              |
| `-` `!`     | 単項マイナス・論理否定（`!e` は `e==0 ? 1 : 0`）                             |
| `^`         | べき乗。**右結合**（`2^2^3` は `2^(2^3)` と評価される）。右辺には単項マイナスも使える（`2^-2`） |

<Note>
  式の中の `/` と `%` は生の IEEE 754 演算で、`x/0` は無限大、`x%0` は `NaN` になります。これは Divide ブロック（ゼロ除算で `0.0` を返す）とは別の挙動です。
</Note>

## 関数・定数

| 式                             | 説明                                                   |
| ----------------------------- | ---------------------------------------------------- |
| `pi`                          | 円周率                                                  |
| `pi2`                         | 円周率の2倍                                               |
| `sin(x)` `cos(x)` `tan(x)`    | 三角関数。**単位はラジアン**（独立ブロックの Trigonometry はターン単位のため異なる）  |
| `asin(x)` `acos(x)` `atan(x)` | 逆三角関数。`asin`/`acos` は定義域外の入力に対して `0` を返す             |
| `atan(y, x)` / `atan2(y, x)`  | 2引数の逆正接（象限を考慮）。`atan` は1引数・2引数どちらでも使え、`atan2` は2引数専用 |
| `abs(x)`                      | 絶対値                                                  |
| `ceil(x)` `floor(x)`          | 天井関数・床関数                                             |
| `round(x)`                    | 整数への丸め                                               |
| `round(x, y)`                 | `x` を `y` の最も近い倍数に丸める                                |
| `sgn(x)`                      | 符号。`x` が 0 のときは `1` を返す（一般的な符号関数と異なる）                |
| `sqrt(x)`                     | 平方根                                                  |
| `max(x, y)` `min(x, y)`       | 最大値・最小値                                              |
| `len(x, y)`                   | ベクトル長 `sqrt(x^2 + y^2)`                              |
| `len2(x, y)`                  | ベクトル長の二乗 `x^2 + y^2`（平方根を取らない）                       |
| `lerp(x, y, z)`               | 線形補間 `x + (y - x) * z`                               |
| `clamp(x, y, z)`              | クランプ `max(y, min(z, x))`                             |

<Warning>
  `asin(x)` / `acos(x)` は `x` が -1〜1 の範囲外だと `0` を返します。エラーにはなりません。
</Warning>

## エラー時の挙動

文法として解釈できない式は、通常のブロック未接続時と同じデフォルト出力（Number 系なら `0.0`、Boolean 系なら `false`）になります。


## Related topics

- [ロジックブロック](/stormworks/logic/logic-blocks.md)
- [設定リファレンス](/physics-codegen/reference/settings.md)
- [FAQ・トラブルシューティング](/stormmin/faq.md)
- [使い始め方](/stormmin/getting-started.md)
- [HTTP API リファレンス](/physics-codegen/reference/api.md)
