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.Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Como redefinir o diretório Home? (5)
Problemas com adaptadores wifi no Zorin (1)
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (7)