양수와 음수가 반복되는 배열에서
양수가 묶여있는 연속된 부분배열을 찾는 로직을 구상했다.
그런데 서버에서 배열을 받아오는 것 까지는 완료였고
아무리 코드를 봐도 정상작동해야했지만 뜻대로 작동하지 않았다.
결과값을 모두 프린트해보니
"Infinity" 라는 출력이 눈에 띄었고 잠시 후 눈치챘다.
rps 를 구하기 위해 [ 1 / (pulse width * 주기) ] 식이었는데
pulse width 에 0이 들어있는 경우가 있던 것이다.
(물론 이 0도 내가 임의적으로 넣었다.. 왜 그랬니)
여기서 궁금한 점은 두 개였다.
1. 왜 0으로 나눴는데 나누기를 zero 로 했다면서
Arithmetic Exception 이 뜨지 않았는가?
2. Infinity 는 정수와 비교연산자로 비교했을 때 더 크다고 평가되는 것이 맞는가?
인텔리제이로 실험해봤다.
코드설명
- 발견한 현상도 pw를 파이어스토어에서 받아오느라 long 타입이었따. 그대로 실험.
- rps 라는 double 타입 변수에 식을 똑같이 써봤다. 여기서 0.000016 은 Atmega128 MCU 의 주기 중 하나이다.
- 배열 세개 : 타입별로 다를 수도 있으니 0~9까지 타입변환하여 세 배열을 만들었다.
- rps 가 Infinity 라고 계산되었다면 정말 더 크다고 평가되는지 타입별로 출력해봤다.
- 마지막으로 그럼 상수 0을 분모로 넣으면 어김없이 예외가 나오는지 확인해봤다.
결과 :
자세한 건 연구끝나고 다시 찾아보겠지만
Infinity 라고 평가되었고,
30개 모두 true 라고 비교되었으며
0으로 나눴을 때는 예외가 발생하였다.
그래서 pw 는 어차피 0이 나올 수가 없는 구조라서 0빼고 계산하게 해놨고(임의로 넣은 0번째 index...다 제 업보)
해결되었다.
정리 안 해두면 나중에 또 헤맬 것 같아서 메모해둔다.
'Java' 카테고리의 다른 글
[Java] long 타입(milli 초 타임스탬프) 끼리 기간 차이 구하기(연, 월) feat. Calendar, Date (0) | 2022.07.10 |
---|---|
[Java] 10^-6 (micro) 초 까지 포맷에 맞춰 시간 출력하기 (0) | 2022.07.08 |
[Java] byte 를 hex 값으로 정상 연산하는 법 (0) | 2021.09.06 |
[Java] interface 의 이해 (0) | 2021.02.10 |