0으로 나누면 무한대입니까?
소개
freeCodeCamp 미터법-제국 변환기 프로젝트를 마무리하면서 이상한 버그를 발견했습니다. 가능한 사용자 입력은 3/4mi
와 같이 단위가 있는 분수입니다. 그러나 사용자가 입력할 가능성이 있습니다3/0mi
. 콘솔에서 이것을 테스트하기로 결정하고 다음을 얻었습니다.
3/0
// Infinity
오류를 예상했지만 값을 얻었습니다 Infinity
. 이유를 알아낼 수 있는지 알아보기 위해 이것을 살펴보겠습니다.
탐구하다
먼저, 예상 결과인지 확인하기 위해 MDN으로 이동했습니다.
2.0 / 0 // Infinity
2.0 / 0.0 // Infinity, because 0.0 === 0
2.0 / -0.0 // -Infinity
예상한 답변인 것 같지만, 뭔가를 알아차렸습니다. 음수 0으로 나누면 음수 무한대가 됩니다. 그것이 무엇을 의미하는지 확실하지 않아 ECMAScript를 확인하기로 결정했습니다.
NOTE: ECMAScript is the official specification of JavaScript.
ECMAScript에 따르면 :
The result is determined by the specification of IEEE 754-2019 arithmetic
...
Division of a nonzero finite value by a zero results in a signed infinity. The sign is determined by the rule already stated above
불행히도 IEEE 문서에 액세스할 수 없습니다. 그래서 나의 여행은 여기서 끝이다. 그러나 여기에 주제에 대해 찾은 몇 가지lecture notes, see pg 10가 있습니다.
해결책
처음에는 try/catch
솔루션을 시도했습니다.
var [numerator, denominator] = num.split('/');
try {
// The plus converts a string to a number
result = +(numerator) / +(denominator);
} catch(e) {
throw new RangeError('Cannot divide by zero');
}
// Infinity
예상대로 Infinity
를 얻습니다. MDN 검색 중 유용한 방법을 찾았습니다 [isFinite]:( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite )
The global isFinite() function determines whether the passed value is a finite number. If needed, the parameter is first converted to a number.
나는 그것을 사용하여 최종 솔루션을 찾았습니다.
if (isFinite(result)) {
return result;
}
return 'Cannot divide by zero';
물론 사용자가 Infinity/Infinity
를 입력할 수 있지만 다른 시간을 위해 저장하겠습니다.
마지막 생각들
0으로 나누면 오류가 발생하지 않는다는 점이 흥미로웠습니다. ECMAScript가 구현하는 IEEE 사양에 따르면 규칙을 따릅니다. 코딩 여정에서 주의해야 할 사항. 기대하는 결과가 그렇게 명확하지 않을 수 있습니다.
자원
MDN - Division(/)
ECMAScript 6.1.6.1.5
MDN - isFinite
이미지는 Dota 2의 Lina입니다.
Reference
이 문제에 관하여(0으로 나누면 무한대입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mtrivera/divide-by-zero-equals-infinity-3pmd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
3/0
// Infinity
먼저, 예상 결과인지 확인하기 위해 MDN으로 이동했습니다.
2.0 / 0 // Infinity
2.0 / 0.0 // Infinity, because 0.0 === 0
2.0 / -0.0 // -Infinity
예상한 답변인 것 같지만, 뭔가를 알아차렸습니다. 음수 0으로 나누면 음수 무한대가 됩니다. 그것이 무엇을 의미하는지 확실하지 않아 ECMAScript를 확인하기로 결정했습니다.
NOTE: ECMAScript is the official specification of JavaScript.
ECMAScript에 따르면 :
The result is determined by the specification of IEEE 754-2019 arithmetic
...
Division of a nonzero finite value by a zero results in a signed infinity. The sign is determined by the rule already stated above
불행히도 IEEE 문서에 액세스할 수 없습니다. 그래서 나의 여행은 여기서 끝이다. 그러나 여기에 주제에 대해 찾은 몇 가지lecture notes, see pg 10가 있습니다.
해결책
처음에는 try/catch
솔루션을 시도했습니다.
var [numerator, denominator] = num.split('/');
try {
// The plus converts a string to a number
result = +(numerator) / +(denominator);
} catch(e) {
throw new RangeError('Cannot divide by zero');
}
// Infinity
예상대로 Infinity
를 얻습니다. MDN 검색 중 유용한 방법을 찾았습니다 [isFinite]:( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite )
The global isFinite() function determines whether the passed value is a finite number. If needed, the parameter is first converted to a number.
나는 그것을 사용하여 최종 솔루션을 찾았습니다.
if (isFinite(result)) {
return result;
}
return 'Cannot divide by zero';
물론 사용자가 Infinity/Infinity
를 입력할 수 있지만 다른 시간을 위해 저장하겠습니다.
마지막 생각들
0으로 나누면 오류가 발생하지 않는다는 점이 흥미로웠습니다. ECMAScript가 구현하는 IEEE 사양에 따르면 규칙을 따릅니다. 코딩 여정에서 주의해야 할 사항. 기대하는 결과가 그렇게 명확하지 않을 수 있습니다.
자원
MDN - Division(/)
ECMAScript 6.1.6.1.5
MDN - isFinite
이미지는 Dota 2의 Lina입니다.
Reference
이 문제에 관하여(0으로 나누면 무한대입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mtrivera/divide-by-zero-equals-infinity-3pmd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var [numerator, denominator] = num.split('/');
try {
// The plus converts a string to a number
result = +(numerator) / +(denominator);
} catch(e) {
throw new RangeError('Cannot divide by zero');
}
// Infinity
The global isFinite() function determines whether the passed value is a finite number. If needed, the parameter is first converted to a number.
if (isFinite(result)) {
return result;
}
return 'Cannot divide by zero';
0으로 나누면 오류가 발생하지 않는다는 점이 흥미로웠습니다. ECMAScript가 구현하는 IEEE 사양에 따르면 규칙을 따릅니다. 코딩 여정에서 주의해야 할 사항. 기대하는 결과가 그렇게 명확하지 않을 수 있습니다.
자원
MDN - Division(/)
ECMAScript 6.1.6.1.5
MDN - isFinite
이미지는 Dota 2의 Lina입니다.
Reference
이 문제에 관하여(0으로 나누면 무한대입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mtrivera/divide-by-zero-equals-infinity-3pmd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(0으로 나누면 무한대입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mtrivera/divide-by-zero-equals-infinity-3pmd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)