none
Bug no Decimal RRS feed

  • Pergunta

  • Eu não sei se é so no meu computador, mas o seguinte escript de vb.net da overflow antes de chegar o limite da variavel.

    Dim var as Decimal

    var=1

    For n As Single=1 to ( 8*7) o limite do decimal é 7 Bytes sem over mas a variavem estoura acho que no 256^2 ou 3.

    var=((var-1)*2)+2

    Next

    o programa calcula anagrama tem o script que da over ao editar o valor maximo da variavel publica arrai que é o tamanho do array e é a quantidade de bits da variavel decimal.

    Ao se ampliar a capacidade do maior ou menor para o maximo do decimal que é 256^7 é obtido um overflow.

    Alguem pode me ajudar com este problema? Sera que eu fiz o codigo errado?

    terça-feira, 27 de abril de 2010 18:09

Respostas

  • o problema é que a variavel "numero" foi definida como inteiro, e nao decimal.

     Dim numero = 0

    é o mesmo que fazer

    dim numero as integer=0

    Mude para 

     Dim numero as Decimal = 0, numero2 As Decimal = 0

    que ira resolver


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    terça-feira, 11 de maio de 2010 19:52
    Moderador

Todas as Respostas

  • Não consegui entender direito.

    Pode postar seu código??


    Quem sabe um dia os DataSets se extinguirão?
    quarta-feira, 28 de abril de 2010 13:29
  • Olá!

    Não tem bug.

    O decimal tem 128 bits ou 16 bytes que podem chegar até o numero 123123123123123123 mais as casas decimais.

    No 33º loop, voce terá o número 73786976294838206464, que estoura o decimal.

    Espero ter ajudado.

    quarta-feira, 28 de abril de 2010 15:37
  • A alguma coisa errada pois o numero não chega ao seu maximo ele fica 1073741824 e da Arithmetic operation resulted in an overflow. no intanto o decimal suporta até seis 256 na base 256.

     Public base As Decimal = 256 ^ 3
        'tamanho do array
        Public arrai As Single = 7*6 '//e suporta 25

     Public Function menor(ByVal Nmenor() As Double, ByVal Nmaior() As Double) As Boolean
            Dim b As Boolean = True, numero = 0, numero2 As Decimal = 0
            If Nmenor(arrai) < Nmaior(arrai) Then
                numero = 1
                numero2 = 2
            Else
                numero = 2
                numero2 = 1
            End If
            For n As Single = arrai - 1 To 1 Step -1 'arrai é a quantidade de numeros 2s que everia ser 8*6 no maximo.
                If Nmenor(n) < Nmaior(n) Then
                    numero = ((numero - 1) * 2) + 1
                    numero2 = ((numero2 - 1) * 2) + 2
                Else
                    numero = ((numero - 1) * 2) + 2
                    numero2 = ((numero2 - 1) * 2) + 1
                End If
            Next
            If numero < numero2 Then
                Return True
            Else
                Return False
            End If
        End Function

     

    oprograma acima e o "calcula anagrama" tambem é de propriedade da microsoft pois eu usei o vb.net express tambem

    terça-feira, 11 de maio de 2010 19:35
  • o problema é que a variavel "numero" foi definida como inteiro, e nao decimal.

     Dim numero = 0

    é o mesmo que fazer

    dim numero as integer=0

    Mude para 

     Dim numero as Decimal = 0, numero2 As Decimal = 0

    que ira resolver


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    terça-feira, 11 de maio de 2010 19:52
    Moderador