Perl에서 NaN 또는 무한 값을 만들거나 테스트하려면 어떻게합니까?Perl에서 NaN 또는 무한대를 만들거나 테스트하려면 어떻게합니까?
답변
여기에 상당히 안정적인 방법 :
my $inf = 9**9**9;
my $neginf = -9**9**9;
my $nan = -sin(9**9**9);
sub isinf { $_[0]==9**9**9 || $_[0]==-9**9**9 }
sub isnan { ! defined($_[0] <=> 9**9**9) }
# useful for detecting negative zero
sub signbit { substr(sprintf('%g', $_[0]), 0, 1) eq '-' }
for my $num ($inf, $neginf, $nan) {
printf("%s:\tisinf: %d,\tisnan: %d,\tsignbit: %d\n", $num, isinf($num), isnan($num), signbit($num));
}
출력은 다음과 같습니다
inf: isinf: 1, isnan: 0, signbit: 0
-inf: isinf: 1, isnan: 0, signbit: 1
nan: isinf: 0, isnan: 1, signbit: 0
print "Is NaN\n" if $a eq 'nan';
print "Is Inf\n" if $a eq 'inf' or $a eq '-inf';
편집 : 음의 무한대에 대한 수정되었습니다.
이 답변에 투표 한 사람은 부끄러워하지 않으면 게시를 떠나게하십시오. 이 방법은 perl에서 완벽하게 작동합니다. $ a가 문자열 표현보다 숫자이면 NaN 또는 Inf 값일 경우에만 'nan'또는 'inf'가됩니다. –
$ a가 숫자가 아니고 실제로 "nan"문자열 인 경우 어떻게해야합니까? –
@ Ryan : 문자열 "nan"은 숫자가 아닙니다. ysth의 솔루션은 정확히 동일하게 작동합니다. 'perl -le 'sub isnan {! 정의 됨 ($ _ [0] <=> 9 ** 9 ** 9)}; 당신이 나를 믿지 않는다면 isnan ("nan") ''을 인쇄하십시오. –
개인적으로 나는 NaN
의 무한대를 만지는 모든 것에 대해 Math::BigFloat
(또는 BigInt
)을 사용합니다.
작업을 수행하는 모듈이 이미있는 경우 왜 해킹 솔루션으로 바퀴를 다시 만들어야합니까?
간결한 답변은 다음과 같습니다.
1
{no strict 'subs'; $NAN="NAN"+1;}
2 : (예 printf 함수)의 출력에 대해 "NAN"변수를 만드는 방법 "NAN"에 대한 시험 방법 (ASCII 아트 같다)
sub isnan {!($_[0]<=0||$_[0]>=0)}
3 :
{$INF="INF"+1; $INFN=-"INF"+1}
4 :에 "INF"와 INFN의 변수를 생성하는 방법 (모든 기호) "INF"테스트 방법 :
sub isinf {($_[0]==+"INF")||($_[0]==-"INF")}
(1)과 (3)은 단지'$ NAN = "NAN"+1;','$ INF = "INF"+1과 다를 바 없습니다. $ INFN = "INF"; 그냥 좀 더 자세한 – ysth
아, (4)는 너무 엄격하게 사용하지 않고 barewords를 사용합니다. 그리고 숫자 문맥에서 "NAN"과 "INF"와 같은 문자열에 의존하는 모든 것들은 이전 perls이나 C 런타임에서 지원하지 않는 경우 (예 : strawberry perl 또는 windows에서의 activeperl) – ysth
에서 실패합니다 _comprehensive_ 대답은 testsuite를 포함합니다. – dolmen
CPAN의 Data::Float을 사용하십시오. 그것은 다음과 같은 기능을 보냅니다 반 작업 솔루션은 여기에 게시 된 다른 사람에게
float_is_infinite(
)float_is_nan()
- ...
과는 달리, 그것은 testsuite 있습니다.
'Data :: Float'의'NaN' 체크는 플랫폼에서의'NaN' 지원에 의존한다는 것을 언급해야합니다. –
은 내가 링크 된 문서는 할머니가 자신과 일치 할 수 없기 때문에 기본 C 구현이 NaN을 지원하는 경우 "유모"== "유모가"결코 사실이라고 지적이 (여기) 사이트와 http://www.learning-perl.com/2015/05/perls-special-not-a-numbers/
을 가지고 검색하는 경우 .
이
멋지게 나는 펄이 정상적으로 저하 않은 환경에서 당신에게 코드를 실행하는 위험을 추측die "This perl does not support NaN!\n" if "NaN" == "NaN";
로 설명되고 당신은 너무 걱정하지 않도록 코드가 충분히 낮을 수 있습니다되지 않았습니다 .
그리고 당신은 'EQ'하지 '=='C 라이브러리가 지원하는 위의 5.10에
- 1. UrlHelper.RouteUrl()을 테스트하려면 어떻게합니까?
- 2. 라디오를 테스트하려면 어떻게합니까?
- 3. NaN 또는 infs에서 중단
- 4. Perl에서 OpenOffice 스프레드 시트를 만들거나 읽으려면 어떻게해야합니까?
- 5. 암호화 알고리즘의 품질을 테스트하려면 어떻게합니까?
- 6. Perl에서 차단하지 않고 STDIN을 테스트하려면 어떻게해야합니까?
- 7. MVVM에서 뷰를 올바르게 테스트하려면 어떻게합니까?
- 8. 개발자 컴퓨터에서 SSL을 테스트하려면 어떻게합니까?
- 9. 어떻게 무한대를 정의하겠습니까?
- 10. Perl에서 함정 알림을 모니터링하려면 어떻게합니까?
- 11. 복잡한 개체 그래프를 생성하는 메서드를 테스트하려면 어떻게합니까?
- 12. Selenium RC에서 포커스가있는 요소를 테스트하려면 어떻게합니까?
- 13. Windows 환경에서 복사 명령을 테스트하려면 어떻게합니까?
- 14. JavaScript를 사용하여 빈 문자열/null을 테스트하려면 어떻게합니까?
- 15. FlexUnit 4에서 이벤트 시퀀스를 테스트하려면 어떻게합니까?
- 16. 배치 파일에서 현재 드라이브 문자를 테스트하려면 어떻게합니까?
- 17. DOS에서 SQL Server 연결을 테스트하려면 어떻게합니까?
- 18. 메서드 개체의 메서드를 단위 테스트하려면 어떻게합니까?
- 19. 로컬 호스트의 Facebook "좋아요"버튼을 테스트하려면 어떻게합니까?
- 20. Ruby에서 무한대를 표현하는 방법은 무엇입니까?
- 21. Perl에서 동적으로 STDOUT/STDERR로 인쇄를 전환하려면 어떻게합니까?
- 22. Perl에서 링크의 콘텐츠 유형을 찾으려면 어떻게합니까?
- 23. Perl에서 하위 하위 디렉토리를 확인하려면 어떻게합니까?
- 24. Zend_Form 클래스를 테스트하려면 어떻게해야합니까?
- 25. Perl에서 5 분 간격으로 데이터를 합계하려면 어떻게합니까?
- 26. Perl에서 파일의 상위 디렉토리를 찾으려면 어떻게합니까?
- 27. 시스템 경로가 잘못되었을 때 예외가 발생하는지 테스트하려면 어떻게합니까?
- 28. Perl에서 map 또는 grep을 사용합니다.
- 29. 데이터베이스 및 Exchange Server Access와 관련된 클래스를 테스트하려면 어떻게합니까?
- 30. Django FloatField에서 무한대와 무한대를 넣는 방법은 무엇입니까?
, 단지 0+ "유모"를 사용, 펄이 숫자로 보간하지 않으려면 물론 , 0+ "inf"또는 0 + "- inf"작업도 가능합니다. – ysth
매우 활력이 넘칩니다. 13 분 전에 질문을했습니다. 11 분 전에, 당신은 대답했습니다. 9 분 전, 댓글을 달았습니다. 맥주 등을 사야합니다. – Telemachus
@ 텔레 마커스 : 나는 그 재료를 마시지 않는다는 것을 제외하면 ... – ysth