Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TalissonBento

Mistake of crazy number

Recommended Posts

Olá galera do imaster, quanto tempo !? últimamente tenho reservado algumas horas para me dedicar em matemática e esse é o motivo de estar fazendo este tópico.

Antes de começar o mistério, gostaria de pedir minhas desculpas aos moderadores por estar postando este tópico aqui na área do C++, na minha cabeça aqui é o melhor lugar para discutir sobre o "problema" pelo nível da linguagem e acredito eu que as ideias expostas aqui serão bem profundas.

 

Resolvendo algumas equações do 2º grau, me deparei com um resultado bem curioso, resultado apresentado por uma calculadora cientifica online (www.calculadoraonline.com.br/cientifica).

 

x² - 26x + 8 =0

 

Com o delta valendo 161.

X = ( -b +- raiz(delta) ) / 2a

 

a = 1

b = -26

c = 8

 

até aí tudo bem, resolvendo e simplicando para x = 13 +- raiz(161)

 

substituindo a incógnita x

 

(13 - raiz(161))² - 26(13 - raiz(161)) = -8,000000000000004

 

formula na calculadora online: x2(13 - raiz(161)) - (26*(13 - raiz(161)))

 

Certíssimo, agora vamos somar 8

 

-8,000000000000004 + 8 = -3,552713678800501e-15

 

x1 = 3,552713678800501e-15

 

What!?

 

sendo que quando vou calcular o x2, obtenho -8 corretamente.

 

 

Por quê isso acontece?, alguma coisa relacionada com o número negativo é representado em binário?

 

testei essa formula em outras linguagens e o resultado obtido foi o mesmo :/

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

IEEE floating point spec.

delta = b^2 - 4ac = (-26)^2 - 4 * 8 = 644
x = [-b +- sqrt(delta)]/2*a = (26 +- sqrt(644))/2

x1 = 25.688577540449522

x2 = 0.31142245955047976

 

Aqui no Python:

>>> a = 25.688577540449522
>>> a**2 - 26*a+8
0.0
>>> b= 0.31142245955047976
>>> b**2 - 26*b+8
-3.552713678800501e-15
(repare que é 10^(-15); praticamente 0)
>>> a =decimal.Decimal((26 + 644**0.5)/2)
>>> b =decimal.Decimal((26 - 644**0.5)/2)
>>> a
Decimal('25.68857754044952201866180985234677791595458984375')
>>> b
Decimal('0.3114224595504797576950295479036867618560791015625')
>>> a**2 - 26*a
Decimal('-7.9999999999999584203425273')
>>> b**2 - 26*b
Decimal('-8.000000000000003499225519734')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu pecado foi no IEEE FLOATING spec.

Está valendo, obrigado pela resposta, irei prestar mais atenção na próxima :)

 

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.