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

  • I ' No estoy seguro de que esto se pueda arreglar, ya que pgfmath está cambiando constantemente entre texto, registros de dimen y registros de fpu (por eso lo considero un oso bailarín).
  • ¡Hola a todos! ¿Ninguno de los profesionales tiene una propuesta de solución?
  • Tenga en cuenta que \pgfkeys{pgf/fpu=false} no hará lo que dice en la lata a menos que se haya arreglado recientemente.
  • Creo que deberías hacer una nueva pregunta sobre esto, ya que ya tienes una buena respuesta. \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 sin fpu.
  • @ Su-47 Creo que la respuesta de Alain Matthes es buena. Tenga en cuenta que ninguno de los sistemas puede competir realmente con un sistema de álgebra por computadora. Se requeriría una versión radicalmente nueva de TeX para realmente eliminar las limitaciones internas, pero AFAIK, no hay ningún plan para configurar un nuevo TeX. Tenga en cuenta también que, en mi humilde opinión, es mejor esperar usando expl3 hasta que esté en un estado en el que pueda estar seguro de que lo que escribió seguirá funcionando en un año a partir de ahora. Como parece que está utilizando MatLab, siempre puede producir los datos con esta herramienta y luego trazarlos con pgfplots o visualización de datos.

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 en TikZ? ¿Existe otra solución, tal vez otra estructura de datos como matrices?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *