Das Problem lässt sich leicht beheben indem man tut was die Meldung sagt
> `Sorry, the operation 'gcd' has not yet been implemented in the floating point unit :-(`
Da ich leider keine Ahnung habe, wie die internen Routinen der FPU das anstellen, dass da nicht immer `Dimension too large` rauskommt musste ich das in Lua implementieren. Ich habe allerdings die zu ersetzende Zeile markiert, sodass du dort deine reine TeX-Implementierung einfügen kannst. Der Algorithmus aus dieser Publikation könnte funktionieren:
> Stehlé, Damien; Zimmermann, Paul (2004), "A binary recursive gcd algorithm", [*Algorithmic number theory*](http://hal.archives-ouvertes.fr/docs/00/07/15/33/PDF/RR-5050.pdf), Lecture Notes in Comput. Sci., **3076**, Springer, Berlin, pp. 411–425, [doi:10.1007/978-3-540-24847-7_31](https://doi.org/10.1007%2F978-3-540-24847-7_31), [MR 2138011](https://www.ams.org/mathscinet-getitem?mr=2138011).
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
-- https://de.wikipedia.org/wiki/Euklidischer_Algorithmus
function gcd(a,b)
return (b ~= 0) and gcd(b,a%b) or a
end
\end{luacode*}
\usepackage{tikz}
\usetikzlibrary{math}
\usetikzlibrary{fpu}
\makeatletter
\let\pgfmath@basic@gcd@=\pgfmathgcd@
\def\pgfmathfloatgcd#1#2{%
\pgfmathfloattoint{#1}\let\pgfmath@tempa\pgfmathresult
\pgfmathfloattoint{#2}\let\pgfmath@tempb\pgfmathresult
%%% PUT PROPER TEX IMPLEMENTATION BELOW
\edef\pgfmathresult{\directlua{tex.sprint(gcd(\pgfmath@tempa,\pgfmath@tempb))}}%
%%% PUT PROPER TEX IMPLEMENTATION ABOVE
\pgfmathfloatparsenumber{\pgfmathresult}%
}
\let\pgfmathfloatgcd@=\pgfmathfloatgcd
\g@addto@macro\pgfmathfloat@parser@install@functions{%
\pgfmathfloat@install\pgfmathgcd@=\pgfmathfloatgcd@
}
\makeatother
\pgfkeys{/pgf/fpu=true}
\begin{document}
\tikzmath{
function mersenne(\N) {return int(gcd((2^\N-1),17);};
}
\foreach \n in {1,...,15}{
\pgfmathparse{mersenne(\n)}
\pgfmathprintnumber\pgfmathresult,
}
\end{document}
[![alt text][1]][1]
---
Das oben gezeigte ist übrigens bereits in TikZ verfügbar mit der `luamath`-Bibliothek.
`luamath`-Bibliothek. Allerdings verträgt sich das wiederum nicht mit der FPU.
\documentclass{article}
\usepackage{tikz}
\usepgflibrary{luamath}
\pgfkeys{/pgf/luamath=parser}
\usetikzlibrary{math}
\begin{document}
\tikzmath{
function mersenne(\N) {return int(gcd((2^\N-1),17));};
}
\foreach \n in {1,...,15}{
\pgfmathparse{mersenne(\n)}
\pgfmathprintnumber\pgfmathresult,
}
\end{document}
[1]: http://texwelt.de/wissen/upfiles/test_379.png