randint
L3fp 패키지는 다음과 같은 매개변수 범위를 제안합니다 +- 10^16 - 1
. 그러나 나는 으로 제한되는 것 같습니다 +-2^31 - 1
. 그 이상의 값은 Number too big
컴파일 오류를 생성합니다. 반면에 나는 fp
값에 대해 예상되는 전체 16자리 숫자의 정확도를 얻고 있습니다. 왜?
\documentclass{article}
% RN. 15 April 2017
% BRIEF DESCRIPTION:
%=======================
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
%-----------------------
\ExplSyntaxOn
\int_new:N \l_rn_someInteger_int
\fp_new:N \l_rn_someFp_fp
\NewDocumentCommand\mySetInteger{m}
{
\int_set:Nn \l_rn_someInteger_int {#1}
some~integer:~\int_use:N \l_rn_someInteger_int\\
\int_set:Nn \l_rn_someInteger_int {\fp_eval:n {randint(#1)}}
some~random~integer:~\int_use:N \l_rn_someInteger_int\\
\fp_set:Nn \l_rn_someFp_fp {\fp_eval:n {rand()}}
some~random~real:~\fp_use:N \l_rn_someFp_fp\\
-------------------------------------------\\
}
\ExplSyntaxOff
%-----------------------
\begin{document}
\mySetInteger{1234}
\mySetInteger{2147483647}
% \mySetInteger{2147483648}
% \mySetInteger{9999999999999999}
\end{document}
답변1
l3fp
부동 소수점 표현식을 저장하는 방법을 살펴볼 수 있습니다 .
\documentclass{article}
\usepackage{xfp}
\begin{document}
\ttfamily
\ExplSyntaxOn % we want to do tests
\fp_set:Nn \l_tmpa_fp { randint(10^15,10^15+10^12) }
\fp_eval:n { \l_tmpa_fp }
\par
\cs_meaning:N \l_tmpa_fp
\ExplSyntaxOff
\end{document}
한 실험에서 나는
이는 범위가 –2 31 에서 2 31 –1 범위로 제한되기 때문에 무작위 정수가 TeX의 원래 의미에서 정수로 저장되지 않음을 보여줍니다 .
위에서 언급한 범위를 벗어나는 값을 정수 변수에 할당할 수는 없습니다.
"부동 소수점 정수"를 사용한 작업에는 작업 수행 시 부동 소수점 산술의 표준 제한 사항이 적용됩니다.
마찬가지로 randint
로 rand
변경 한 후
숫자는 지수와 유효숫자에 대한 4자리 그룹 4개와 함께 저장됩니다. 두 개의 내부 함수 \s__fp
및 \__fp_chk:w
는 숫자를 조작(확장 가능)하는 데 사용됩니다. 종결자는 ;
내부 표현을 종료합니다.
답변2
숫자 2147483648
는 2^31
정확하고 변수는 실제로 TeX 카운트 레지스터이며, 이는 일반적인 카운터(즉 , 숫자 \int_...
)와 마찬가지로 '제한된' 숫자 범위를 갖습니다 .LaTeX
- 2^{31} to 2^{31} - 1
2^32
expl3이 로드된 파일의 .log 파일을 살펴보면 매크로가 실제로 정의 \int...
라는 것을 알 수 있습니다.\countXYZ
저장을 시도하면 마찬가지로 2147483648
오버플로가 발생합니다 .\setcounter{foo}{2147483648}
부동 소수점 숫자는 차원 레지스터와 다르게 저장되며 더 큰 숫자를 허용하지만 정확도는 더 좋지 않습니다.
꼭 봐주세요LaTeX 카운터에 저장할 수 있는 최대 정수는 얼마입니까?또한.