Divisão com double

No trecho de codigo abaixo o que irá acontecer?

public class Teste { public static void main(String[] args) { double aa = 15.38; double zz = aa / 0.0f; System.out.println("o resultado da divisão é " + zz); } }

a) Não compila
b) Irá ocorrer uma ArithmeticException: / by zero
c) o resultado da divisão é Infinity
d) o resultado da divisão é 0

Justifique a sua resposta se possível :lol:

[]s, Welington B. Souza

O décimo primeiro mandamento diz: NUNCA DIVIDIRÁS POR ZERO!!! :mrgreen:
portanto a b é correta, irá ocorrer uma ArithmeticException: / by zero

luiz,

a resposta certa é a C vai dar infinity, daria B se fosse divisão por 0 (integer)

[]s

Vai dar C…
Aquele float é convertido num double(q é o tipo maior)
Acho q só daria B se os 2 operandos fossem integer.

Vixi, que feio!!! :oops: Respondi essa como se tivesse respondendo uma questão de matemática e acabei escorregando nessa!!!

uma parecida:

public class TNan {
	public static void main (String [] args) {
		boolean b;
		double d1 = Double.NaN;
		double d2 = Double.NaN;
		b = d1 == d2;
		System.out.println (b);
	}
}

a - não compila
b - compila e imprime true
c - compila e imprime false

Eu também me enganei de cara, mas depois percebí que no Java (no C/C++ com o gcc e g++ também) esta regra só vale para inteiros. :wink:

[]s, Welington B. Souza

No código: [code]

public class TNan {
public static void main (String [] args) {
boolean b;
double d1 = Double.NaN;
double d2 = Double.NaN;
b = d1 == d2;
System.out.println (b);
}
}
[/code]

Irá compilar e irá imprimir false já que um NAN (Not a Number) não é igual e nenhum outro número, nem a ele mesmo

[quote=“rafabene”]No código: [code]

public class TNan {
public static void main (String [] args) {
boolean b;
double d1 = Double.NaN;
double d2 = Double.NaN;
b = d1 == d2;
System.out.println (b);
}
}
[/code]

Irá compilar e irá imprimir false já que um NAN (Not a Number) não é igual e nenhum outro número, nem a ele mesmo[/quote]

isso mesmo, você acertou!

Pra complicar um pouco, entao: como vc testa se um double qualquer (ou o resultado de uma operacao que retorna double) e’ um NaN? :smiley:

Pra complicar um pouco, entao: como vc testa se um double qualquer (ou o resultado de uma operacao que retorna double) e’ um NaN? :D[/quote]

Assim

if (Double.isNaN(valor_double)) ?

Droga, ficou chato :smiley:

Que tal se eu adicionasse um “…sem usar o Double.isNaN()?” no final da pergunta? :wink:

[quote=“cv”]Droga, ficou chato :smiley:

Que tal se eu adicionasse um “…sem usar o Double.isNaN()?” no final da pergunta? ;)[/quote]

daí já que NaN é diferente dele mesmo era só checar:

if (valor_double != valor_double)

minha mente primitiva não consegue assimilar que um valor seja diferente dele mesmo, mas é isso aí mesmo, é a estória do Double no país das NaNavilhas

hahahahaa boa essa!

Melhor que isso só o fato de termos +zero e -zero.

ou que Infinito/Infinito não for igual a 1 :o

ou que Infinito/Infinito não for igual a 1 :o[/quote]

Mas essa pelo menos a gente consegue provar com uso de limites. :slight_smile:
Quando a +zero e - zero:
+0 == -0;
+0.0 == -0.0;
:?:

Duas, com inteiros dessa vez:

public static void main(String[] args) { for (int x = 0; x >= Integer.MIN_VALUE; x--) if (x == Integer.MIN_VALUE) System.out.println("Hello "); System.out.println("World!"); }O quê aparecerá na saída padrão?

[code]
public static void p(int x) {
System.out.println(x);
}

public static void main(String[] args) {
    p(Math.abs(-1) - 0);
    p(Math.abs(-2) - 1);
    p(Math.abs(-3) - 2);
    
    /* ... */
    
    p(Math.abs(Integer.MIN_VALUE + 1) - (Integer.MAX_VALUE - 1));
    p(Math.abs(Integer.MIN_VALUE) - Integer.MAX_VALUE);
}[/code]Trocando o código de /* ... */ por toda sequência lógica natural de expressões, só irá aparecer 1s na saída padrão?

[quote=renrutal]Duas, com inteiros dessa vez:

public static void main(String[] args) { for (int x = 0; x >= Integer.MIN_VALUE; x--) if (x == Integer.MIN_VALUE) System.out.println("Hello "); System.out.println("World!"); }O quê aparecerá na saída padrão?

[code]
public static void p(int x) {
System.out.println(x);
}

public static void main(String[] args) {
    p(Math.abs(-1) - 0);
    p(Math.abs(-2) - 1);
    p(Math.abs(-3) - 2);
    
    /* ... */
    
    p(Math.abs(Integer.MIN_VALUE + 1) - (Integer.MAX_VALUE - 1));
    p(Math.abs(Integer.MIN_VALUE) - Integer.MAX_VALUE);
}[/code]Trocando o código de /* ... */ por toda sequência lógica natural de expressões, só irá aparecer 1s na saída padrão?[/quote]

Bruno, você ressuscitou um tópico de 5 anos, mas lá vai.
A primeira entra em loop infinito contendo Hello Hello Hello…
A segunda saíra 1 em todas, exceto na última por causa do overflow.

[quote=victorwss]
Bruno, você ressuscitou um tópico de 5 anos, mas lá vai.
A primeira entra em loop infinito contendo Hello Hello Hello…
A segunda saíra 1 em todas, exceto na última por causa do overflow.[/quote]

Opps. :oops: Pensei que vi 22/04, nem olhei o ano.

E vc está errado na segunda opção.

Sempre vão sair 1s. E vai sair 1 na última justamente por causa do overflow.