在 TeX 中计算平方根

在 TeX 中计算平方根

我们可以使用这些(主要是纯 TeX)宏简单地计算数字平方根的近似值。

\documentclass{article}

\begin{document}

\newcount\liczba
\newcount\kwadrat
\def\sqroot#1{\liczba=0\kwadrat=0
\loop
\ifnum\kwadrat<#1 \advance\liczba by1 \kwadrat\liczba \multiply \kwadrat by \liczba 
\repeat$\sqrt{#1}\approx\the\liczba$}


\sqroot{121}

\sqroot{300}

\sqroot{626}

\end{document}

有没有更好的方法?特别是如果我们想在 TikZ 中使用这些值。

答案1

\documentclass{article}
\usepackage{xfp}

\begin{document}

\newcount\liczba
\newcount\kwadrat
\def\sqroot#1{\liczba=0\kwadrat=0
\loop
\ifnum\kwadrat<#1 \advance\liczba by1 \kwadrat\liczba \multiply \kwadrat by \liczba
\repeat$\sqrt{#1}\approx\the\liczba$}

\NewExpandableDocumentCommand{\bettersquareroot}{O{16}m}{%
  \fpeval{round(sqrt(#2),#1)}%
}


\sqroot{121} and \bettersquareroot{121}

\sqroot{300} and \bettersquareroot[5]{300}

\sqroot{626} and \bettersquareroot{626}

\end{document}

好多了,不是吗?

在此处输入图片描述

如果想要整数近似值:

\documentclass{article}
\usepackage{xfp}

\begin{document}

\newcount\liczba
\newcount\kwadrat
\def\sqroot#1{\liczba=0\kwadrat=0
\loop
\ifnum\kwadrat<#1 \advance\liczba by1 \kwadrat\liczba \multiply \kwadrat by \liczba 
\repeat$\sqrt{#1}\approx\the\liczba$}

\NewExpandableDocumentCommand{\bettersquareroot}{m}{%
  \fpeval{round(sqrt(#1),0)}%
}


\sqroot{121} and \bettersquareroot{121}

\sqroot{300} and \bettersquareroot{300}

\sqroot{626} and \bettersquareroot{626}

\sqroot{652} and \bettersquareroot{652}

\end{document}

在此处输入图片描述

不过,你也可以使用前面更通用的代码

\bettersquareroot[0]{652}

请注意,这是完全可扩展的,因此您可以在任何需要整数的上下文中使用。

答案2

如果你已经在使用 TikZ,你也可以使用\pgfmathparse

\documentclass{article}
\usepackage{tikz}

\begin{document}

\newcount\liczba
\newcount\kwadrat
\def\sqroot#1{\liczba=0\kwadrat=0
\loop
\ifnum\kwadrat<#1 \advance\liczba by1 \kwadrat\liczba \multiply \kwadrat by \liczba 
\repeat$\sqrt{#1}\approx\the\liczba$}

\newcommand\pgfsqrt[1]{\pgfmathparse{int((sqrt(#1)))}\pgfmathresult}

\sqroot{121} and \pgfsqrt{121}

\sqroot{300} and \pgfsqrt{300}

\sqroot{626} and \pgfsqrt{626}

\end{document}

在此处输入图片描述

答案3

这是一个基于 LuaLaTeX 的解决方案。它使用 Lua 库函数math.sqrtmath.ceil。(后一个函数返回不小于其参数的最小整数;因此\math.ceil(11.0)返回11,而math.ceil(11.01)返回12。)

在此处输入图片描述

\documentclass{article}
\newcommand\sqroot[1]{\directlua{tex.sprint(math.sqrt(#1))}}
\newcommand\approxsqroot[1]{\directlua{tex.sprint(math.ceil(math.sqrt(#1)))}}
   
\begin{document}
\obeylines % just for this example
$\sqrt{121}=\sqroot{121}=\approxsqroot{121}$
$\sqrt{300}\approx\sqroot{300}\le\approxsqroot{300}$
$\sqrt{626}\approx\sqroot{626}\le\approxsqroot{626}$
\end{document}

答案4

我无法理解您的代码(对不起)。我建议您使用calculator包,使用\TRUNCATE[0],获取整数。图片取自手册。

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{calculator}
  

\begin{document}
\SQUAREROOT{121}{\sola}
$\sqrt{121}=\sola$
$\approx$ \TRUNCATE[0]{\sola}{\solA}
\solA


\SQUAREROOT{300}{\solb}
$\sqrt{300}=\solb$
$\approx$
\TRUNCATE[0]{\solb}{\solB}
\solB

\SQUAREROOT{626}{\solc}
$\sqrt{626}=\solc$
$\approx$
\TRUNCATE[0]{\solc}{\solC}
\solC
\end{document}

输出为:

在此处输入图片描述

相关内容