foreach文で割り算

 

foreach文の思わぬ使い方

正の整数を正の整数で割ったときの余りの計算をforeach文で行うことができますが、ここで注目してほしいのは大小評価による条件分岐をしていないことです。

 

入力:

\begin{tikzpicture}
\tikzmath{
  \n=334;
  \m=13;
}
\global\edef\divisor{\n}
\global\edef\divisible{\m}

\foreach \p in {-m, 0,  ..., \n}{
  \tikzmath{
    \l=int(\n-\p);
  }
  \global\edef\remainder{\l}
}
\end{tikzpicture}
\divisor を\divisible で割った余りは\remainder です

出力:

334を13で割った余りは9です

 

なぜ-mからか?

\foreach \p in {0, \m,  ..., \n}だと\n<\mのときにバグります。例えば

7を13で割った余りは-6です

となります。バグの理由はforeachの仕様(2つ目までは必ず実行する)に由来しています。

 

なぜ\globalが必要か?

foreach文中の変更はローカルで、ループが進むたびに捨てられるデータであるためです。

 

TikZパッケージのこれくらいの使用は想定されている気がしますが、うまく使うと想定外のことができるのかもしれません

 

ぺりをだねぇ