awk 산술과 expr 사이에는 대조되는 출력이 있습니다.
예
expr 11111111111111111111 / 22
주어진
505050505050505050
그러나 awk의 경우:
echo '11111111111111111111' | awk '{q=$1/22;;print q}'
주어진
505050505050505024
누군가 이것을 설명할 수 있나요?
답변1
아마도 당신의 awk
작업은 GNU awk처럼 부동 소수점 값을 사용하여 작동할 것입니다.
$ gawk 'BEGIN{ a = 11111111111111111111; print a, a/22; }'
11111111111111110656 505050505050505024
정확하게 저장할 수도 없고 11111111111111111111
나머지( 11111111111111111111 / 22
is 505050505050505029.81...
)도 정확하게 저장할 수 없습니다.
숫자의 범위 가 expr
더 넓은 것 같습니다. 내 것은 그렇지 않습니다 (GNU coreutils 8.26의 것):
$ expr 11111111111111111111 / 22
expr: 11111111111111111111: Numerical result out of range
~처럼@스틸드라이버댓글, 현재 버전GNU awk는 또한 다음을 수행할 수 있습니다.사용GNU MPFR 라이브러리고정밀 연산에 사용됩니다. 예를 들어, 4배 정밀도 부동 소수점 수는 다음 나눗셈에 대한 정확한 답변을 제공하는 데 충분합니다.
$ gawk -M -v PREC="quad" -v OFMT="%.6f" \
'BEGIN{ a = 11111111111111111111; print a, a/22; }'
11111111111111111111 505050505050505050.500000
그 외에도 bc
Python은 임의의 큰 숫자와 함께 사용할 수 있습니다.