Enviado em 31/03/2014 - 16:33h
Gente é o seguinte estou desenvolvendo uns códigos de hash bem aqui, um é usando método da divisão outro o da multiplicação, fiz até os simuladores para achar qual seria a melhor tabela, estou fazendo usando distribuições do top 100 do distrowatch. Problema é o seguinte no método da multiplicação já estou com o código 99% pronto, o que está me atrapalhando são 3 chaves que estão dando problema no arredondamento, como o código é extenso e tem biblioteca, e ainda lê de um arquivo binário, vou recriar apenas a parte que dá o bug para vcs me ajudarem a solucionar.#include <stdio.h> #include <stdlib.h>// no caso do codigo pq leio do arquivo #include <math.h> #define A 0.41 int main(void) { int k1=1201500; int k2=2463075; int k3=1261575; int M=(int)pow(2,4); double partint; int posicao; printf("\n k = %d",k1); // aqui o valor de k está normal printf("\n A = %.10lf",A)//a tambem está normal 0.41000000 printf("\n k*A = %.10lf",k1*A);/* aqui já está alterado aparece 492614.9999999999 quando deveria aparecer 492615.0000000000*/ printf("\n modf(k*A,&partint) = %,10lf",modf(k1*A,&partint));/*aqui está alterado aparecendo 0.9999999999 quando deveria aparecer 0.0000000000*/ printf("\n M*modf(k*A,&partint) = %.10lf",M*modf(k1*A,&partint));/*aqui está alterado está aparecendo 15.9999999991 quando deveria aparecer 0.0000000000*/ printf("\n (int)M*modf(k*A,&partint) %d",(int)M*modf(k1*A,&partint));/* e aqui aparece 15 onde deveria aparecer 0*/ posicao=(int)M*modf(k1*A,&partint); //internamente é assim os prints são so para ilustrar printf("\n k = %d",k2); // aqui o valor de k está normal printf("\n A = %.10lf",A)//a tambem está normal 0.41000000 printf("\n k*A = %.10lf",k2*A);/* aqui já está alterado aparece 1009860.7499999999 quando deveria aparecer 1009860.7500000000*/ printf("\n modf(k*A,&partint) = %,10lf",modf(k2*A,&partint));/*aqui está alterado aparecendo 0.7499999999 quando deveria aparecer 0.7500000000*/ printf("\n M*modf(k*A,&partint) = %.10lf",M*modf(k2*A,&partint));/*aqui está alterado está aparecendo 11.9999999981 quando deveria aparecer 12.0000000000*/ printf("\n (int)M*modf(k*A,&partint) %d",(int)M*modf(k2*A,&partint));/* e aqui aparece 11 onde deveria aparecer 12*/ posicao=(int)M*modf(k2*A,&partint); //internamente é assim os prints são so para ilustrar printf("\n k = %d",k3); // aqui o valor de k está normal printf("\n A = %.10lf",A)//a tambem está normal 0.41000000 printf("\n k*A = %.10lf",k3*A);/* aqui já está alterado aparece 517245.7499999999 quando deveria aparecer 517245.7500000000*/ printf("\n modf(k*A,&partint) = %,10lf",modf(k3*A,&partint));/*aqui está alterado aparecendo 0.7499999999 quando deveria aparecer 0.7500000000*/ printf("\n M*modf(k*A,&partint) = %.10lf",M*modf(k3*A,&partint));/*aqui está alterado está aparecendo 11.9999999991 quando deveria aparecer 12.0000000000*/ printf("\n (int)M*modf(k*A,&partint) %d",(int)M*modf(k3*A,&partint));/* e aqui aparece 11 onde deveria aparecer 12*/ posicao=(int)M*modf(k3*A,&partint); //internamente é assim os prints são so para ilustrar }
Enviado em 01/04/2014 - 12:00h
de acordo com meu próprios testes, descobri o seguinte, por mais que ao printar o double com 100 casas aparecem números até a casa 54 após a vírgula, os números que realmente influem no valor do cálculo são as 15 primeiras casas ,não havendo alteração nos outros numeros independente do valor colocado.Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Solução rápida para o problema do Network Manager conectar mas não navegar
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
Ajuda Pra Melhoria do NFTABLES. (5)
Sunshine e Moonlight Linux (0)