정수의 배치 스크립트 32 비트 제한


1

Batch의 정수 수학 연산의 32 비트 제한을 극복 할 수있는 방법이 있습니까? 스크립트에서 추가 작업을 수행 중이며 합계 값이 범위 (2 ^ 31 -1)보다 커집니다.

VBscript와 같은 다른 스크립팅 라인이나 배치 스크립트에 비슷한 것을 포함하여 어떤 아이디어를 찾고 있습니다.

답변:


0

NT 배치 파일의 소스 수학

해결 방법 : 32 비트

32 비트 제한에 대한 해결 방법은 다음과 같습니다.

  1. 마지막 3 자리를 잘라내어 1000 (또는 10의 거듭 제곱)으로 나누기

  2. 숫자를 별도의 10 진수로 나누고 모든 수학을 수행하고 논리를 수동으로 수행

  3. 다른 스크립팅 언어

해결 방법 # 1을 사용하여 디스크 공간을 추가 할 수 있습니다 (예 :

"Chop"코드 예

비결은 각 (큰) 숫자가 문자열로 취급 된 다음 가장 오른쪽에있는 6 자 (숫자)가 잘린 다음 결과 만 숫자로 취급된다는 것입니다.

이것은 수학을 수행하기 전에 모든 숫자를 "반올림"하기 때문에 다소 조잡한 해결 방법입니다. 각 서브 디렉토리 (% Count % / 2)에 대해 절반의 메가 바이트를 % Total %에 추가하면 잘림이 보상되므로 총계가 개별 숫자보다 정확합니다. 숫자는 "실제"메가 바이트 (1024 x 1024)를 나타내지 않지만 백만 바이트 (1000 x 1000)를 나타냅니다.

해결 방법 # 2는 Brian Williams의 배치 파일에 의해 완벽하게 시작됩니다.

Add.bat

IsLarger.cmd

Multiply.cmd

완벽하지만 매우 복잡합니다.

다른 스크립팅 언어 인 해결 방법 # 3은 설명이 필요 없습니다.

해결 방법 : 정수

다른 스크립팅 언어를 사용하는 것을 제외하고 부동 소수점 수학을 허용하는 실제 해결 방법은 없습니다.

단, 고정 소수점 이하 자릿수 (예 : 2)가있는 경우 모든 예외에 100을 곱할 수 있습니다.

최종 결과에 10 진수 구분 기호를 표시하려면 이너 나누기를 100으로, 10 진수 구분 기호를, 모듈러스 나누기를 100으로 연결하십시오.

SET 전체 = 결과 / 100 SET "Fraction = 결과 %% 100"SET 결과 = % Whole %. % Fraction %

그러나 32 비트 제한에서 벗어날 수 있습니다.

일반적으로 부동 소수점 수학의 경우 다른 스크립팅 언어를 사용하는 것이 좋습니다.


0

이 경우 외부 도구가 필요합니다. 시작점으로 bc (임의의 정밀도를 지원하고 대부분의 Linux 시스템에 사전 설치됨)를 사용할 수 있습니다.

에코 '123456789 * 123456789'| 기원전


당신의 답변에 감사드립니다. 더 큰 숫자로 수학 연산을 수행하는 데 문제가 있습니다.이 솔루션으로 해당 문제를 해결할 수 있습니까? 저는 Windows OS에서 이것을하고 있습니다
ajith

어이, 나는 당신이 bash를 사용하고 있다고 가정하는 질문을 잘못 읽었습니다. 혼란을 드려 죄송합니다. 그렇다면 Windows 사용자에게 질문을 남기는 것이 좋습니다.
Abel Cheung
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.