문제

이것이 멍청한 초보자 문제라면 나를 용서하십시오. 그러나 나는 그것을 얻지 못합니다.

그렇게 선언 된 회원 변수가 있습니다.

public Double Value;

3.14159265를 값으로 할당하고 그 사인을 계산하려고 할 때 다음과 같습니다.

system.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
system.out.println(Value.toString()); //outputs NaN

사실, 이것은 내가 시도한 모든 단일 값에서 발생합니다 - 0으로도! Math.sin ()은 인수 값에 관계없이 결과적으로 항상 NAN을 생산하는 것 같습니다.

문서는 다음과 같이 말합니다.

논쟁이 NAN 또는 무한대 인 경우 결과는 NAN입니다.

그러나 나의 주장은 분명히 NAN이나 무한대가 아닙니다!

도대체 무슨 일이 일어나고 있습니까?

업데이트

지구상에서 가장 멍청한 프로그래머입니다. 내 프로젝트에서 전체 코드는 물론 위의 예보다 훨씬 더 복잡합니다. 그것은 일종의 표현식 파서 및 평가자이며 정의 된 수학적 함수의 경우 스위치 클로스를 사용하여 호출 할 기능을 결정합니다. 나는 사건에서 브레이크 진술을 잊었다 이로 인해 SQRT 기능이 음의 매개 변수로 실행되었습니다.

내가 말했듯이 - 지구상에서 가장 멍청한 프로그래머 ...

나는 그것이 최고의 IMHO이기 때문에 가장 큰 대답을 받아 들였다. 당신의 시간을 낭비한 죄송합니다 -.-

도움이 되었습니까?

해결책

Double value = 3.14159265;
System.out.println(value.toString()); //outputs 3.14159265
value = Math.sin(value);
System.out.println(value.toString()); //outputs NaN

출력 (예상대로) :

3.14159265
3.5897930298416118E-9

따라서 문제는 다른 곳에 있어야합니다. 어떤 버전의 JDK를 사용하고 있습니까? 32 비트 또는 64 비트입니까? 중간에 붙여 넣지 않은 다른 코드가 있습니까?

a NaN ~에서 Math.sin 사용하는 것입니다 inf 영형 NaN 매개 변수로. 그리고 그 값을 잘못 계산하여 얻을 수있는 숫자에 명시 적으로 할당하지 않고 : 예를 들어 :

Double d = 0.0/0.0;
System.out.println(Math.sin(d));
double d2 = Double.POSITIVE_INFINITY;
System.out.println(Math.sin(d2));

이것은 출력됩니다 : NaN 두 배.

두 메모 :

  • 변수에 대한 대문자 문자를 사용하지 마십시오 (사용 value, 아니다 Value)
  • 매개 변수 (또는 다른 문자열로 구성된)로 찌르기가 필요한 경우 명시 적으로 호출 할 필요가 없습니다. toString(), 넌 할 수있어 System.out.println(value)

다른 팁

이것이 내가 얻는 것입니다.

Double Value;
Value = 3.14159265 ;
System.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
System.out.println(Value.toString()); //outputs 3.5897930298416118E-9

따라서 두 가지 옵션이 있습니다.

  1. 게시 한 코드는 사용중인 코드가 아닙니다 (시스템에 소문자 S가 있으므로 컴파일하지 않습니다).
  2. 다른 것이 수학을하기 전 또는 후에 NAN으로 가치의 가치를 바꾸고 있습니다.

우선, 당신은 그것을 사용하고 있습니다 Double 참조 (래퍼) 유형이 아닙니다 double 원시 유형 - 왜? 초기화에 실제로 사용하는 코드는 무엇입니까? Value (BTW는 일반적인 Java 코딩 표준을 기반으로 대문자로 시작해서는 안됩니까?)? 내 생각에 당신은 단지 초기화가 아니라는 것입니다 Value 제대로. a를 사용하는 것으로 시작하십시오 double (a Double).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top