awk는 왜 합계를 0이 아닌 아주 작은 수로 만들까요?

우커

이 파일이 있고 첫 번째 열의 모든 숫자를 합산하고 싶습니다. 쉬운:

awk '{s+=$1;print $1,s}' file
0.1048 -1.2705
0.4196 -0.8509
0.4196 -0.4313
0.2719 -0.1594
0.0797 -0.0797
0.0797 -5.55112e-17   #Notice this line

당신은 마지막은 0 내가 그 알고 있어야 참조 e-17제로이지만 출력의 범위에 0이 아니면 가끔 출력이 정확히 0입니다 e-15e-17부정적 또는 긍정적 인 신호에. 이 문제를 해결하려면 절대 값을 사용해야합니다.

awk '{s+=$1;if (sqrt(s^2)<0.01) s=0;print $1,s}' file

왜 이런 일이 일어나는지 아십니까?

스콧

귀하의 질문은 "왜 이런 일이 발생합니까?"이지만 다른 사람들이 언급 한 암시 적 질문은 "어떻게이 문제를 해결할 수 있습니까?"입니다. 의견에서 제기 한 접근 방식을 알아 냈습니다.

그래서 점을 없애기 위해 1000을 곱하면 정확한 결과를 얻을 수 있습니다.

예. 음, 10000, 소수점 네 자리가 있기 때문입니다. 이걸 고려하세요:

awk '{ s+=$1*10000; print $1, s/10000 }'

불행히도, 토큰 (문자열)을 십진수로 해석하자마자 손상이 이미 발생했기 때문에 이것은 작동하지 않습니다. 예를 들어 printf "%.20f\n"는 입력 데이터 0.4157가 실제로 0.41570000000000001394로 해석 된다는 것을 보여줍니다 . 이 경우 10000을 곱하면 4157이됩니다. 그러나 예를 들어 0.5973= 0.59730000000000005311이고 여기에 10000을 곱하면 5973.00000000000090949470이됩니다.

그래서 대신 우리는

awk '{ s+=int($1*10000); print $1, s/10000 }'

"이어야하는"정수 (예 : 5973.00000000000090949470)를 해당 정수 (5973)로 변환합니다. 그러나 때로는 변환 오류가 음수이기 때문에 실패합니다. 예 : 0.71300.71299999999999996714입니다. 그리고 awk함수는 반올림이 아니라 (0으로) 잘립니다 . 따라서 7129도 마찬가지 입니다.int(expr)int(7129.99999999)

그래서 인생이 당신에게 레몬을 주면 당신은 레모네이드를 만듭니다. 도구가 자르기 기능을 제공하면 0.5를 더하여 반올림합니다. 7129.99999999 + 0.5≈7130.49999999, 물론 int(7130.49999999)7130입니다. 그러나 기억하십시오 : 0쪽으로int() 잘리고 입력에 음수가 포함됩니다. –7129.99999999에서 –7130으로 반올림하려면 0.5를 빼서 –7130.49999999를 구해야합니다. 그래서,

awk '{ s+=int($1*10000+($1>0?0.5:-0.5)); print $1, s/10000 }'

$1*10000if $1is ≤ 0에 -0.5를 더합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

왜이 geom_polygon은 소수가 아닌 정수만 포함합니까?

분류에서Dev

0이 아닌 요소를 무작위로 0으로 바꾸는 방법은 무엇입니까?

분류에서Dev

왜 작은 SSD는 OS 전용이 아닌 대용량 SSD를 사용합니까?

분류에서Dev

왜 (int) (14/13-0.001)은 1이 아닌 0을 산출합니까?

분류에서Dev

주장이 아닌. 왜?

분류에서Dev

왜 세분화 작업을위한 IOU가 아닌 주사위 계수입니까?

분류에서Dev

* nix 사람들은 왜 "문자가 아닌"... "를 사용하는 것을 좋아합니까?

분류에서Dev

* nix 사람들은 왜 "문자가 아닌"... "를 사용하는 것을 좋아합니까?

분류에서Dev

배열에서 0이 아닌 요소를 단일 주기로 맨 위로 이동하는 방법은 무엇입니까?

분류에서Dev

정규식은 숫자를 대체하지만 부동이 아닌 0으로 시작하는 숫자

분류에서Dev

주어진 배열 열에서 0이 아닌 값의 수를 어떻게 계산합니까?

분류에서Dev

Javabean에서 인수가 아닌 생성자를 만드는 것이 왜 관습이 되었습니까?

분류에서Dev

Javabean에서 인수가 아닌 생성자를 만드는 것이 왜 관습이 되었습니까?

분류에서Dev

왜 기본 키는 SQL에서 단순한 속성이 아닌 제약 조건으로 간주됩니까?

분류에서Dev

왜 'in'또는 'out'이 아닌 'inout'을 사용하지 않아야합니까?

분류에서Dev

왜 항상 변화를 만지거나 주인이 아닐 때는 아무것도 만질 수없는 이유

분류에서Dev

Facebook 좋아요 버튼은 0이 아닌 424로 계산됩니다.

분류에서Dev

발신 또는 수신 통화는 둘 다가 아닌 별표 설정에서만 작동합니다. 왜?

분류에서Dev

Columnfilter는 수평이 아닌 수직으로 작동합니다.

분류에서Dev

왜 ( "0"+ "1"). toInt ()! 0이 아닌 Int로 1을 반환합니다.

분류에서Dev

0으로 나누기 예외를 처리하지 않도록 제수에 아주 작은 수를 추가하는 것이 좋은 습관입니까?

분류에서Dev

왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

분류에서Dev

왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

분류에서Dev

왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

분류에서Dev

Excel 수식에서 0이 아닌 값에 주석을다는 방법은 무엇입니까?

분류에서Dev

Facebook Ads Insights : 월 ~ 일 주가 아닌 일 ~ 토 주별로 집계 된 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

야, 왜 내가 기본 키가 아닌 필드로 django에서 raq 쿼리를 만들 수 없습니까? 그런 테이블을 찾을 수 없습니다.

분류에서Dev

단결 8은 왜 일이 아닌데, 환상일까요?

분류에서Dev

왜 awk는 받아들이지 않습니까! 필드 구분자로?

Related 관련 기사

  1. 1

    왜이 geom_polygon은 소수가 아닌 정수만 포함합니까?

  2. 2

    0이 아닌 요소를 무작위로 0으로 바꾸는 방법은 무엇입니까?

  3. 3

    왜 작은 SSD는 OS 전용이 아닌 대용량 SSD를 사용합니까?

  4. 4

    왜 (int) (14/13-0.001)은 1이 아닌 0을 산출합니까?

  5. 5

    주장이 아닌. 왜?

  6. 6

    왜 세분화 작업을위한 IOU가 아닌 주사위 계수입니까?

  7. 7

    * nix 사람들은 왜 "문자가 아닌"... "를 사용하는 것을 좋아합니까?

  8. 8

    * nix 사람들은 왜 "문자가 아닌"... "를 사용하는 것을 좋아합니까?

  9. 9

    배열에서 0이 아닌 요소를 단일 주기로 맨 위로 이동하는 방법은 무엇입니까?

  10. 10

    정규식은 숫자를 대체하지만 부동이 아닌 0으로 시작하는 숫자

  11. 11

    주어진 배열 열에서 0이 아닌 값의 수를 어떻게 계산합니까?

  12. 12

    Javabean에서 인수가 아닌 생성자를 만드는 것이 왜 관습이 되었습니까?

  13. 13

    Javabean에서 인수가 아닌 생성자를 만드는 것이 왜 관습이 되었습니까?

  14. 14

    왜 기본 키는 SQL에서 단순한 속성이 아닌 제약 조건으로 간주됩니까?

  15. 15

    왜 'in'또는 'out'이 아닌 'inout'을 사용하지 않아야합니까?

  16. 16

    왜 항상 변화를 만지거나 주인이 아닐 때는 아무것도 만질 수없는 이유

  17. 17

    Facebook 좋아요 버튼은 0이 아닌 424로 계산됩니다.

  18. 18

    발신 또는 수신 통화는 둘 다가 아닌 별표 설정에서만 작동합니다. 왜?

  19. 19

    Columnfilter는 수평이 아닌 수직으로 작동합니다.

  20. 20

    왜 ( "0"+ "1"). toInt ()! 0이 아닌 Int로 1을 반환합니다.

  21. 21

    0으로 나누기 예외를 처리하지 않도록 제수에 아주 작은 수를 추가하는 것이 좋은 습관입니까?

  22. 22

    왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

  23. 23

    왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

  24. 24

    왜 소비자는 문 기관이 아닌 표현 기관과 람다을 받아 들일 수 있습니까?

  25. 25

    Excel 수식에서 0이 아닌 값에 주석을다는 방법은 무엇입니까?

  26. 26

    Facebook Ads Insights : 월 ~ 일 주가 아닌 일 ~ 토 주별로 집계 된 데이터를 얻는 방법은 무엇입니까?

  27. 27

    야, 왜 내가 기본 키가 아닌 필드로 django에서 raq 쿼리를 만들 수 없습니까? 그런 테이블을 찾을 수 없습니다.

  28. 28

    단결 8은 왜 일이 아닌데, 환상일까요?

  29. 29

    왜 awk는 받아들이지 않습니까! 필드 구분자로?

뜨겁다태그

보관