TOPIC

Erro no Cálculo

Daniel Roberto de Aguiar asked 6 months ago

Sei que o comando que estou mandando está dando problema por causa do depurador, mas não sei o motivo já que com os comandos que insiro não deveria.

i = 0
while i <= 2:
    for j in range(3):
            if i == 0 or i == 1 or i == 2:
                print('I={0:.0f} J={1:.0f}'.format(i, j + 1 + i))
            else:
                print('I={0:.1f} J={1:.1f}'.format(i, j + 1 + i))
    i += 0.2

Quando vejo no debugger em um dado momento a variável "i" assume um valor com várrias casas decimais, coisa que não deveria acontecer tendo em vista que é acrescentando apenas "0.2".

P.S. Consegui resolver a atividade, mas gostaria de saber o motivo deste problema, algum poderia me ajudar?

Desde já Agradeço.

Remember not post solutions. Your post may be reviewed by our moderators.

  • Wesley Dias replied 6 months ago

    Issto acontece devido a um probleminha em representar números de ponto flutuante, tanto é que sem colocar formatação no código ele retorna:

    I=0 J=1
    I=0 J=2
    I=0 J=3
    I=0.2 J=1.2
    I=0.2 J=2.2
    I=0.2 J=3.2
    I=0.4 J=1.4
    I=0.4 J=2.4
    I=0.4 J=3.4
    I=0.6000000000000001 J=1.6
    I=0.6000000000000001 J=2.6
    I=0.6000000000000001 J=3.6
    I=0.8 J=1.8
    I=0.8 J=2.8
    I=0.8 J=3.8
    I=1.0 J=2.0
    I=1.0 J=3.0
    I=1.0 J=4.0
    I=1.2 J=2.2
    I=1.2 J=3.2
    I=1.2 J=4.2
    I=1.4 J=2.4
    I=1.4 J=3.4
    I=1.4 J=4.4
    I=1.5999999999999999 J=2.5999999999999996
    I=1.5999999999999999 J=3.5999999999999996
    I=1.5999999999999999 J=4.6
    I=1.7999999999999998 J=2.8
    I=1.7999999999999998 J=3.8
    I=1.7999999999999998 J=4.8
    I=1.9999999999999998 J=3.0
    I=1.9999999999999998 J=4.0
    I=1.9999999999999998 J=5.0

    e 1.9999999999999998 é diferente de 2, fazendo com que caia no else e escreva na tela com 1 casa decimal.

    MOD
  • Wesley Dias replied 6 months ago

    Se você alterar a condição da linha 4

    i = 0
    while i <= 2:
        for j in range(3):
                if i == 0 or i == 1 or i == 2:
                    print('I={0:.0f} J={1:.0f}'.format(i, j + 1 + i))

    para

    i = 0
    while i <= 2:
        for j in range(3):
                if i == 0 or i == 1 or i > 1.99:
                    print('I={0:.0f} J={1:.0f}'.format(i, j + 1 + i))

    vai funcionar

    MOD
  • Wesley Dias replied 6 months ago

    No DEBUG está assim:

    I=0 J=1
    I=0 J=2
    I=0 J=3
    I=0.2 J=1.2
    I=0.2 J=2.2
    I=0.2 J=3.2
    I=0.4 J=1.4
    I=0.4 J=2.4
    I=0.4 J=3.4
    I=0.6 J=1.6
    I=0.6 J=2.6
    I=0.6 J=3.6
    I=0.8 J=1.8
    I=0.8 J=2.8
    I=0.8 J=3.8
    I=1 J=2
    I=1 J=3
    I=1 J=4
    I=1.2 J=2.2
    I=1.2 J=3.2
    I=1.2 J=4.2
    I=1.4 J=2.4
    I=1.4 J=3.4
    I=1.4 J=4.4
    I=1.6 J=2.6
    I=1.6 J=3.6
    I=1.6 J=4.6
    I=1.8 J=2.8
    I=1.8 J=3.8
    I=1.8 J=4.8
    I=2 J=3
    I=2 J=4
    I=2 J=5

    e seu programa está gerando

    I=0 J=1
    I=0 J=2
    I=0 J=3
    I=0.2 J=1.2
    I=0.2 J=2.2
    I=0.2 J=3.2
    I=0.4 J=1.4
    I=0.4 J=2.4
    I=0.4 J=3.4
    I=0.6 J=1.6
    I=0.6 J=2.6
    I=0.6 J=3.6
    I=0.8 J=1.8
    I=0.8 J=2.8
    I=0.8 J=3.8
    I=1 J=2
    I=1 J=3
    I=1 J=4
    I=1.2 J=2.2
    I=1.2 J=3.2
    I=1.2 J=4.2
    I=1.4 J=2.4
    I=1.4 J=3.4
    I=1.4 J=4.4
    I=1.6 J=2.6
    I=1.6 J=3.6
    I=1.6 J=4.6
    I=1.8 J=2.8
    I=1.8 J=3.8
    I=1.8 J=4.8
    I=2.0 J=3.0
    I=2.0 J=4.0
    I=2.0 J=5.0
    MOD