尝试在 TikZ 中进行简单计算,结果出现“尺寸太大”错误

尝试在 TikZ 中进行简单计算,结果出现“尺寸太大”错误

我正在处理一个 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}

相关内容