Cuando calculo algo, a veces los resultados intermedios se vuelven demasiado grandes para el sistema pgf
. Se puede usar la biblioteca fpu
. Lo leí en el TikZ & PGF
manual (consulte la página 627), aquí y aquí pero sigo recibiendo este error:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
¿Qué pasa?
Aquí está mi código:
\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}
Actualizar :
Estoy «usando una macro de aquí (gracias a gato de Schrödinger ). Ver mi 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}
y obtener todavía un
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
error. ¿Qué hago mal?
¡Gracias por su ayuda y esfuerzo de antemano!
Comentarios
Respuesta
Parece un trabajo para 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}
(La convención en expl3
es indexar desde 1 ya que esto se alinea con el caso de uso más común: composición tipográfica. Por lo tanto, indexé la lista desde uno, pero la corregí para indexar desde cero para la ecuación en sí. >
- Hola @Joseph Wright! Gracias por tu respuesta, lo probé. 1. Por supuesto que funciona, pero la variable de índice debe comenzar por cero (por mi propósito especial). 2. Los resultados de su respuesta son diferentes. Los resultados correctos deberían verse como una parábola descendente, vea aquí . Los resultados de tu respuesta parecen una parábola abierta hacia arriba. Quizás hice algo mal. 3. De todos modos, no puedo ' usar tu responder a mi pregunta (ver el enlace de arriba). ¿Qué dices?
- @ Su-47 No ' no sé lo que quieres decir con ' el enlace arriba '
- El enlace en el punto 2 probablemente ( tex.stackexchange.com/questions/348739/ … ).
- Hola @Joseph Wright y @Torbj ø rn T.! Lo siento por la larga ausencia. Gracias por tus comentarios. Torbj ø rn T. tiene razón, quise decir este enlace . Ahora el resultado es correcto. Pero como dije en mi último comentario, no puedo ' usar la respuesta anterior para resolver mi otra pregunta (ver el enlace de arriba). Si entiendo correctamente, actualmente no hay forma de usar matrices y
fpu
juntos enTikZ
? ¿Existe otra solución, tal vez otra estructura de datos como matrices?
\pgfkeys{pgf/fpu=false}
no hará lo que dice en la lata a menos que se haya arreglado recientemente.\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\\ }
funciona. A partir de ahora,fpu
no admite un par de cosas, incluida la manipulación de números enteros y este tipo de extracción de listas. Entonces necesitas extraer la entrada sinfpu
.