DeuRuimDotCom
(usa Linux Mint)
Enviado em 05/09/2019 - 14:32h
paulo1205 escreveu:
Experimente separar aquela chamada a printf() em que você imprime primeiro um valor do tipo long double e depois um inteiro em duas chamadas, imprimindo um de cada vez, e diga se o resultado foi melhor.
Testei assim, imprimindo um de cada vez: printf(int), em seguida printf(long double+int) e novamente printf(int). Os printf(int) retornaram o valor exato do inteiro e permaneceu a inconsistência no printf(long double+int).
paulo1205 escreveu:
Quando postar código, procure postá-lo de um modo mais completo, incluindo as declarações de todas as variáveis que nele são usadas. Inclua também o código que reflete o comportamento que você entende estar errado (por exemplo, você falou sobre um produto estar sendo impresso com erro, mas não mostrou como está chamando a função de impressão, de modo que não dá para nem para especular se o erro é no cálculo ou na impressão).
Como disse, o problema surgiu num contexto de testes do tipo "long double" e não em um programa específico. Mas tem razão, sim. No código que postei, as declarações foram assim: "unsigned int linha, coluna; int i,j; long double** M" (Obs.: Se coloco apenas "double** M", funciona normalmente).
O erro na multiplicação que citei provavelmente foi na própria operação, uma vez que se deu num contexto simples de multiplicação de matrizes e a impressão foi dos valores da matriz produto, construída à parte. (Quando, sem aritmética envolvida, simplesmente se atribui um long double a dada variável e se imprime o valor, a impressão sai exata.)
O mesmo problema ocorreu quando testei a eliminação gaussiana para sistemas lineares.
Usei na maioria códigos extraídos de páginas confiáveis (por isso não quis postar aqui, porque não são meus e eu não lembrava a fonte exata de cada qual) e posso garantir que fiz vários testes e também com o tipo "double" simples, o qual funcionou perfeitamente.
paulo1205 escreveu:
Outras informações que podem ser úteis: versões e procedências dos compiladores, se são de 32 bits ou 64 bits, e opções de compilação usadas em cada caso.
Isso talvez seja importante mesmo. É que eu não sou do ramo da computação, sou mais um curioso, e raramente uso algo que não seja o
default da aplicação. Mas vamos lá:
O CodeBlocks eu baixei direto da página da IDE na internet esse arquivo aqui: codeblocks_17.12-1_i386_stable.tar.xz (Corrigindo: codeblocks_17.12-1_amd64_stable.tar.xz). Nos settings, apenas diz que o compilador é o GNU GCC.
O Dev-C++, instalado sobre Windows 7, diz usar o TDM-GCC 4.9.2 64-bit release.
Desde já, grato pela atenção.