Când calculez ceva, uneori devin rezultatele intermediare la mari pentru sistemul pgf
. Se poate utiliza biblioteca fpu
. Am citit despre asta în TikZ & PGF
manual (vezi pagina 627), aici și aici , dar totuși primesc această eroare:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
Ce nu este?
Iată codul meu:
\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}
Actualizare :
Eu „folosesc o macrocomandă din aici (mulțumită pisica lui Schrödinger ). Vedeți MWE-ul meu:
\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}
și primiți încă o eroare
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
. Ce greșesc?
Vă mulțumim pentru ajutor și efort în avans!
Comentarii
Răspuns
Sună ca un job pentru 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}
(Convenția din expl3
este să indexați de la 1 deoarece acest lucru se aliniază la cel mai frecvent caz de utilizare: tipărirea. De aceea, am indexat lista dintr-o singură, dar am corectat la indexarea de la zero pentru ecuația însăși.)
Comentarii
- Bună ziua @Joseph Wright! Vă mulțumim pentru răspunsul dvs. l-am testat. 1. Bineînțeles că funcționează, dar variabila index ar trebui să înceapă cu zero (pentru scopul meu special). 2. Rezultatele răspunsului dvs. sunt diferite. Rezultatele corecte ar trebui să arate ca o parabolă descendentă, consultați aici . Rezultatele răspunsului dvs. arată ca o parabolă deschisă în sus. Poate că fac ceva greșit. 3. Oricum nu pot ‘ să vă folosesc răspunde la întrebarea mea (vezi linkul de mai sus). Ce spui?
- @ Su-47 Nu ‘ nu știu ce vrei să spui despre ‘ link deasupra ‘
- Link-ul din punctul 2 probabil ( tex.stackexchange.com/questions/348739/ … ).
- Bună ziua @Joseph Wright și @Torbj ø rn T.! Îmi pare rău pentru absența îndelungată. Mulțumesc pentru comentarii. Torbj ø rn T. are dreptate am vrut să spun acest link . Acum rezultatul este corect. Dar așa cum am spus în ultimul meu comentariu, nu pot ‘ să folosesc răspunsul de mai sus pentru a rezolva o altă întrebare (a se vedea linkul de mai sus). Dacă înțeleg corect în prezent, nu există nicio modalitate de a folosi matricele și
fpu
împreună înTikZ
? Există o altă soluție, poate o altă structură de date ca tablouri?
\pgfkeys{pgf/fpu=false}
nu va face ceea ce spune pe cutie decât dacă a fost reparată recent.\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\\ }
funcționează. De acum,fpu
nu acceptă câteva lucruri, inclusiv manipularea numărului întreg și acest tip de extragere a listelor. Deci, trebuie să extrageți intrarea fărăfpu
.