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
}
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém que utilize o Warsaw do BB no Ubuntu 24.04 (1)
Usar uma VM dentro do meu notebook como firewall para um dispositivo e... (1)