Als ik iets bereken, worden de tussenresultaten soms te groot voor het pgf
-systeem. Men kan de fpu
bibliotheek gebruiken. Ik heb erover gelezen in de TikZ & PGF
handleiding (zie pagina 627), hier en hier maar ik krijg nog steeds deze foutmelding:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
Wat is er mis?
Hier is mijn code:
\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \begin{document} %data values: \def\RTable{{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897}} %prints the result to the console: \pgfkeys{/pgf/fpu} \foreach \i in {0, ..., 80} { \pgfmathparse{abs(\RTable[\i] - 100 - 3.0897 / 8 * \i)}\i, \pgfmathresult\\ } \pgfkeys{/pgf/fpu=false} \end{document}
Update :
Ik “gebruik een macro van hier (met dank aan Kat van Schrödinger ). Zie mijn MWE:
\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \newcommand\pgfmathparseFPU[1]{ \begingroup \pgfkeys{ /pgf/fpu, /pgf/fpu/output format = fixed } \pgfmathparse{#1} \pgfmathsmuggle \pgfmathresult \endgroup} \begin{document} %data values: \def\UABmValues{{14.9, 15.8, 17.7, 18.3, 19, 20, 21.1, 22.2, 24.3, 26.9, 30.1}} %prints the result to the console: \foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathparseFPU{-25500 / (\UABmValues[\i] / 1000 - 255 / 52) - 5200 - 3.0897 / 8 * \k}\i, \pgfmathresult\\ } \end{document}
en krijg nog steeds een
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
fout. Wat heb ik fout?
Bij voorbaat dank voor je hulp en moeite!
Opmerkingen
Antwoord
Klinkt als een klus voor de LaTeX3 FPU:
\documentclass{article} \usepackage{expl3} \ExplSyntaxOn \cs_new_eq:NN \fpeval \fp_eval:n \cs_new_eq:NN \clistitem \clist_item:Nn \cs_new_eq:NN \foreachint \int_step_inline:nnnn \ExplSyntaxOff \begin{document} %data values: \def\RTable{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897} %prints the result to the console: \foreachint{1}{1}{81}{% #1, \fpeval{abs(\clistitem\RTable{#1} - 100 - 3.0897 / 8 * (#1 - 1))}\\ } \end{document}
(De conventie in expl3
is om te indexeren vanaf 1, aangezien dit overeenkomt met het meest voorkomende gebruik: typografie. Ik heb daarom de lijst geïndexeerd van één maar gecorrigeerd naar index vanaf nul voor de vergelijking zelf.)
Opmerkingen
- Hallo @Joseph Wright! Bedankt voor je antwoord Ik heb het getest. 1. Natuurlijk werkt het, maar de indexvariabele moet beginnen met nul (voor mijn speciale doel). 2. De resultaten van uw antwoord zijn anders. De juiste resultaten moeten eruitzien als een neerwaartse parabool, zie hier . De resultaten van uw antwoord zien eruit als een geopende parabool naar boven. Misschien heb ik iets verkeerds gedaan. 3. Hoe dan ook, ik kan ' uw antwoord in mijn vraag (zie de link hierboven). Wat zeg je?
- @ Su-47 Ik weet niet ' wat je bedoelt met ' de link boven '
- De link in punt 2 waarschijnlijk ( tex.stackexchange.com/questions/348739/ … ).
- Hallo @Joseph Wright en @Torbj ø rn T.! Sorry voor de lange afwezigheid. Bedankt voor je reacties. Torbj ø rn T. heeft gelijk. Ik bedoelde deze link . Nu is het resultaat goed. Maar zoals ik in mijn laatste opmerking al zei, kan ik ' het bovenstaande antwoord niet gebruiken om mijn andere vraag op te lossen (zie de link hierboven). Als ik het momenteel goed begrijp, is er geen manier om arrays en
fpu
samen te gebruiken inTikZ
? Is er een andere oplossing, misschien een andere datastructuur als arrays?
\pgfkeys{pgf/fpu=false}
niet zal doen wat er op de verpakking staat, tenzij het onlangs is opgelost.\foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathsetmacro{\myval}{\UABmValues[\i]} \pgfmathparseFPU{-25500/(\myval/1000-255/52)-5200-3.0897/8*\k}\i, \pgfmathresult\\ }
werkt. Vanaf nu ondersteuntfpu
een aantal dingen niet, waaronder manipulatie van gehele getallen en dit soort lijstextractie. Dus je moet de invoer extraheren zonderfpu
.