그래서 LaTeX를 사용하여 약간 복잡한 계산을 하려고 했는데 계속 말도 안되는 대답이 나왔습니다. 특정 조건에서 공을 덮을 수 있는 레이어 수를 계산하려고 하는데 LaTeX에서 계속 부정적인 답변을 제공합니다! 몇 시간 동안 머리를 뽑은 후 아래 MWE에 표시된 오류를 추적할 수 있었습니다.
\documentclass[border=1mm]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{pgfplots}
\begin{document}
\pgfmathsetmacro{\earthRadiusKm}{6371}
\pgfmathsetmacro{\coinRadiusM}{1.05 / 1000}
\pgfmathsetmacro{\coinHeightM}{1.7 / 1000}
\pgfkeys{/pgf/fpu, /pgf/fpu/output format=fixed}
\pgfmathsetmacro{\coinsTotalHeight}{3.27*10^17}
\pgfmathsetmacro{\earthRadiusM}{6371*1000}
\pgfmathsetmacro{\radiusCoinsLayerCubedMtest}{%
(\earthRadiusM^3)^(1/3) - \earthRadiusM}
\pgfmathsetmacro{\R}{
((\earthRadiusM)^3 + 1.5 * (\coinRadiusM) * (\coinsTotalHeight))^(1/3)
}
\pgfmathsetmacro{\layers}{
(\R - \earthRadiusM)/(\coinHeightM)
}
\pgfkeys{/pgf/fpu=false}
$\sqrt{(R_\oplus^3)^{1/3} - R_\oplus}$ equals $0$ not \radiusCoinsLayerCubedMtest !
The radius is
\begin{align*}
R = \sqrt[3]{R_\oplus^3 + \frac{3}{2}r_m h_c}
\approx
\R
\end{align*}
%
Which means that the total number of layers are
%
\begin{align*}
n &= \frac{R - R_\oplus}{h_m} \\
&\approx \frac{\R - \earthRadiusM}{\coinHeightM}
\approx \layers
\end{align*}
\end{document}
문제는
(something^3)^(1/3) - something
아마도 반올림 오류로 인해 0이 아닙니다. 위의 표현식이 0으로 평가되어야 한다는 것은 분명하지만 그렇지 않습니다. 대신에 나는 -1400.0
그것이 완전한 넌센스라는 것을 알게 되었습니다. fpu 라이브러리에서 제곱근을 너무 정확하게 계산하려면 어떻게 해야 합니까?
내 실제 예는 조금 더 복잡하지만 결국 동일한 계산으로 귀결됩니다.
답변1
답변2
기존 명령을 재정의하지 않도록 보장하는 변수에 대한 일부 구문 설탕과 함께 fp
모듈을 사용하십시오 .expl3
그러나 그런 것을 기대할 수는 없습니다(엑스3 ) 1/3 =엑스.
\documentclass{article}
\usepackage{mathtools,xfp}
\ExplSyntaxOn
\NewDocumentCommand{\setfpvar}{mm}
{
\fp_zero_new:c { nebu_var_#1_fp }
\fp_set:cn { nebu_var_#1_fp } { #2 }
}
\NewExpandableDocumentCommand{\fpvar}{m}
{
\fp_use:c { nebu_var_#1_fp }
}
\ExplSyntaxOff
\begin{document}
\setfpvar{earthRadiusKm}{6371}
\setfpvar{coinRadiusM}{1.05 / 1000}
\setfpvar{coinHeightM}{1.7 / 1000}
\setfpvar{coinsTotalHeight}{3.27*10^17}
\setfpvar{earthRadiusM}{6371*1000}
\setfpvar{radiusCoinsLayerCubedMtest}{
(\fpvar{earthRadiusM}^3)^(1/3) - \fpvar{earthRadiusM}
}
\setfpvar{R}{
((\fpvar{earthRadiusM})^3 + 1.5 * (\fpvar{coinRadiusM}) * (\fpvar{coinsTotalHeight}))^(1/3)
}
\setfpvar{layers}{
(\fpvar{R} - \fpvar{earthRadiusM})/(\fpvar{coinHeightM})
}
$\sqrt{(R_\oplus^3)^{1/3} - R_\oplus}$ equals
$\fpvar{radiusCoinsLayerCubedMtest}$
\bigskip
The radius is
\begin{align*}
R = \sqrt[3]{R_\oplus^3 + \frac{3}{2}r_m h_c}
\approx
\fpvar{R}
\end{align*}
which means that the total number of layers is
\begin{align*}
n &= \frac{R - R_\oplus}{h_m} \\
&\approx \frac{\fpvar{R} - \fpvar{earthRadiusM}}{\fpvar{coinHeightM}}
\approx \fpvar{layers}
\end{align*}
\end{document}