När jag beräknar något, blir ibland delresultaten för stora för pgf
-systemet. Man kan använda biblioteket fpu
. Jag läste om det i TikZ & PGF
manualen (se sidan 627), här och här men jag får fortfarande det här felet:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
Vad är fel?
Här är min kod:
\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}
Uppdatering :
Jag ”använder ett makro från här (tack till Schrödinger katt ). 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}
och få fortfarande ett
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
fel. Vad gör jag fel?
Tack för din hjälp och ansträngning i förväg!
Kommentarer
Svar
Låter som ett jobb för 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
är att indexera från 1 eftersom detta överensstämmer med det vanligaste användningsfallet: typsättning. Jag indexerade därför listan från en men korrigerades till index från noll för själva ekvationen.)
Kommentarer
- Hej @Joseph Wright! Tack för ditt svar. Jag testade det. 1. Självklart fungerar det, men indexvariabeln bör börja med noll (för mitt speciella syfte). 2. Resultatet av ditt svar är annorlunda. De korrekta resultaten ska se ut som en nedåtgående parabel se här . Resultaten av ditt svar ser ut som en öppnad uppåt parabel. Kanske gör jag något fel. 3. Hur som helst kan jag ' inte använda din svara i min fråga (se länken ovan). Vad säger du?
- @ Su-47 Jag vet inte ' vad du menar om ' länken ovan '
- Länken i punkt 2 troligen ( tex.stackexchange.com/questions/348739/ … ).
- Hej @Joseph Wright och @Torbj ø rn T.! Ledsen för den långa frånvaron. Tack för dina kommentarer. Torbj ø rn T. är rätt menade jag den här länken . Nu är resultatet rätt. Men som jag sa i min senaste kommentar kan jag ' inte använda ovanstående svar för att lösa min andra fråga (se länken ovan). Om jag förstår rätt för närvarande finns det inget sätt att använda matriser och
fpu
tillsammans iTikZ
? Finns det en annan lösning, kanske en annan datastruktur som matriser?
\pgfkeys{pgf/fpu=false}
inte gör vad det står på burken om det inte nyligen har fixats.\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\\ }
fungerar. Från och med nu stöderfpu
inte ett par saker, inklusive manipulation av heltal, och denna typ av listutvinning. Så du måste extrahera posten utanfpu
.