我正在处理一个 pgfplot,想计算一些坐标。出于某种原因,我总是得到“尺寸太大”的错误,但我不明白为什么会出现溢出和/或精度错误,因为数字不是特别大或特别小。
简单地说,我想计算 sqrt(100^2 + 500^2)。手动输入数字 509.9 即可达到预期效果。
我究竟做错了什么?
\documentclass[tikz]{standalone}
\begin{document}
\def\Zis{500}
\def\vone{100}
%\def\va{(sqrt((\vone)^2+(\Zis)^2))} %% Doesn't work
\pgfmathsetmacro{\va}{sqrt((\vone)^2+(\Zis)^2)} %% Doesn't work
%\pgfmathsetmacro{\va}{509.9} % Works
%\def\va{509.9} % Works
\begin{tikzpicture}
\node at (0,0) {\va};
\end{tikzpicture}
\end{document}
答案1
Ulrike Fischer 的评论为您提供如何进行计算的解决方案。要知道为什么问题出现的时候,TikZ 手册的这一部分(第 1011 页左右,“94.数学表达式”是关键:
...并且 500 的平方超出了范围。
显然,您通常可以操纵您的表达式以避免产生大的中间结果(这通常是一件好事):
\documentclass[tikz]{standalone}
\begin{document}
\def\Zis{500}
\def\vone{100}
%% (if x>0) sqrt(x²+y²)=x·sqrt(1+(y/x)²)
\pgfmathsetmacro{\va}{\vone*sqrt(1+(\Zis/\vone)^2)}
\begin{tikzpicture}
\node at (0,0) {\va};
\end{tikzpicture}
\end{document}