Pergunta

Perdoe-me se isso é um idiota iniciantes problema, mas eu realmente não entendi.

Eu tenho uma variável de membro declarado da seguinte forma:

public Double Value;

Quando eu atribuir 3.14159265 de Valor e tenta calcular o seno de ele, isso acontece:

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

Na verdade, isso acontece com cada valor eu tentei, mesmo com 0!Matemática.sin() parece sempre produzir NaN como resultado, independentemente dos argumentos de valor.

O docs dizer:

Se o argumento é que a Fernanda ou o infinito, então o resultado é a Fernanda.

Mas o meu argumento é claramente não NaN ou infinito!

O que diabos está acontecendo lá?

ATUALIZAÇÃO

Acontece que eu sou a mais idiota programador na terra.No meu projeto, todo o código é, naturalmente, muito mais complexo do que o exemplo acima.É um tipo de analisador de expressão e avaliador e para o definidas as funções matemáticas de eu usar um switch-cláusula para decidir qual função chamar - Eu esqueci a instrução break nos casos o que causou a função sqrt para ser executado com o parâmetro negativo.

Como eu disse - mais idiota programador na terra...

Eu aceito a primeira resposta, pois é a melhor imho.Desculpe caras para desperdiçar o seu tempo -.-

Foi útil?

Solução

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

saídas (conforme o esperado):

3.14159265
3.5897930298416118E-9

então o problema deve estar em outro lugar, qual a versão do JDK que você está usando?é de 32 bits ou de 64 bits?existe outro código no meio em que você não colar?

A única maneira de obter um NaN a partir de Math.sin é usando inf o NaN como o parâmetro.E sem atribuir explicitamente que o valor para um número que você pode obter em apenas fazendo o que é errado cálculos, por exemplo:

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

este resultado será: NaN duas vezes.

Duas notas:

  • não use letras maiúsculas para as variáveis (uso value, não Value)
  • quando você precisa de picadas como parâmetros (ou composto para outras cadeias de caracteres), você não precisa chamar explicitamente toString(), você pode fazer System.out.println(value)

Outras dicas

Isso é o que eu recebo:

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

Portanto, existem 2 opções:

  1. O código que você postou não é o código que você está usando (percebo que você tem uma caixa inferior no sistema, então isso não vai compilar)
  2. Outra coisa está mudando o valor do valor para NAN antes ou depois de fazer a matemática.sin

Para iniciantes, você está usando o Double tipo de referência (wrapper), não o double Tipo primitivo - por quê? Qual é o código que você está realmente usando para inicializar Value (Qual, btw, não deve começar com um caractere de maiúsculas com base nos padrões de codificação Java Common)? Meu palpite é que você está simplesmente não inicializando Value devidamente. Tente começar com o uso de um double (não a Double).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top