Divisão com double

20 respostas
W

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

20 Respostas

L

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

B

luiz,

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

[]s

I

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

L

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

M

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

W

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

R
No código:
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); 
   } 
}

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

M
"rafabene":
No código:
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); 
   } 
}

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

isso mesmo, você acertou!

C

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:

M

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

Assim

if (Double.isNaN(valor_double)) ?

C

Droga, ficou chato :smiley:

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

M

“cv”:
Droga, ficou chato :smiley:

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

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

C

hahahahaa boa essa!

L

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

M

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

P

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

Mas essa pelo menos a gente consegue provar com uso de limites. <img src="//https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pnglight_smile.png?v=5" title=":slight_smile:" class="emoji" alt=":slight_smile:">

Quando a +zero e - zero:

+0 == -0;

+0.0 == -0.0;

:?:
B
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?
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);
    }
Trocando o código de /* ... */ por toda sequência lógica natural de expressões, só irá aparecer 1s na saída padrão?
V
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?
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);
    }
Trocando o código de /* ... */ por toda sequência lógica natural de expressões, só irá aparecer 1s na saída padrão?

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.

B

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.

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.

V

renrutal:
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.

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.

Sim, refiz o cálculo aqui e vi que ia dar. Eu tinha errado o cálculo do overflow antes.

Criado 21 de agosto de 2003
Ultima resposta 29 de abr. de 2008
Respostas 20
Participantes 12