정수의 배치 스크립트 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.