Når jeg beregner noget, bliver nogle gange interimsresultaterne for store for pgf
-systemet. Man kan bruge fpu
biblioteket. Jeg læste om det i TikZ & PGF
manual (se side 627), her og her men jeg får stadig denne fejl:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
Hvad er der galt?
Her er min kode:
\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}
Opdatering :
Jeg “bruger en makro fra her (takket være Schrödingers kat ). Se min 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}
og få stadig en
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
fejl. Hvad har jeg forkert?
Tak for din hjælp og indsats på forhånd!
Kommentarer
Svar
Lyder som et job til 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}
(Konventionen i expl3
er at indeksere fra 1, da dette stemmer overens med den mest almindelige brugssag: sætning. Jeg har derfor indekseret listen fra en, men korrigeret til indeks fra nul for selve ligningen.)
Kommentarer
- Hej @Joseph Wright! Tak for dit svar, jeg testede det. 1. Selvfølgelig fungerer det, men indeksvariablen skal begynde med nul (for mit specielle formål). 2. Resultaterne af dit svar er forskellige. De korrekte resultater skal se ud som en nedadgående parabel se her . Resultaterne af dit svar ser ud som en åbnet opadgående parabel. Måske gør jeg noget forkert. 3. Jeg kan alligevel ' ikke bruge din svar på mit spørgsmål (se linket ovenfor). Hvad siger du?
- @ Su-47 Jeg ved ikke ' hvad du mener om ' linket over '
- Linket i punkt 2 sandsynligvis ( tex.stackexchange.com/questions/348739/ … ).
- Hej @Joseph Wright og @Torbj ø rn T.! Undskyld for det lange fravær. Tak for dine kommentarer. Torbj ø rn T. har ret, jeg mente dette link . Nu er resultatet rigtigt. Men som jeg sagde i min sidste kommentar, kan jeg ' ikke bruge ovenstående svar til at løse mit andet spørgsmål (se linket ovenfor). Hvis jeg forstår korrekt i øjeblikket, er der ingen måde at bruge arrays og
fpu
sammen iTikZ
? Er der en anden løsning, måske en anden datastruktur som arrays?
\pgfkeys{pgf/fpu=false}
ikke vil gøre det, der står på dåsen, medmindre den for nylig er blevet rettet.\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\\ }
fungerer. Fra nu af understøtterfpu
ikke et par ting, herunder heltalsmanipulation og denne slags listeekstraktion. Så du er nødt til at udtrække posten udenfpu
.