erreur: invalid opérandes binaires % (ont 'double' et 'double')
J'ai un programme que je suis en train d'écrire que les listes de 100 000 nombres premiers. Il fonctionne très bien pour 10 numéros, mais après de nombreux chiffres, ils se tournent vers les valeurs négatives. J'ai changé les services de renseignements à long ints et qui n'a pas changer quoi que ce soit, alors j'ai changé pour des doubles et je reçois le message d'erreur répertoriés dans le titre. Que dois ma variable? Gardez à l'esprit, je suis encore nouveau pour la programmation. J'ai aussi regardé quelques posts précédents et ne vois pas la réponse.
int is_prime(double x,char array[]){
//doesnt use array but I put it in there
double j=2;//divider
for(j=2;j<=pow(x,0.5);j++){
if((x%j==0)){
return(0);
} //isnt prime
}
return(1);//because it is prime.
}
la réponse à cette question est essentiellement la même que dans Comment puis-je Convertir des Float en Int avec le Module en C?
Hein???
steve, j'ai fait les modifications proposées et ont toujours les mêmes résultats, c'est parce que je suis en train de monter ces valeurs dans un char tableau[], devrait-il être autre chose?
Vous devez vraiment être à l'aide d'un type entier pour les nombres premiers, pas une représentation à virgule flottante. Je suis d'accord avec Steve Jessop que vous avez probablement un autre problème. Vous devriez essayer de résoudre ce --- j'espère que votre professeur vous marquez une réponse qui utilisé
ouais j'ai compris ce n'était pas mon problème d'origine. Quand j'ai fait ces changements, rien n'a vraiment changé, je ne sais pas ce qui est mal, je soupçonne un char tableau[], ne peut pas tenir les valeurs que je suis en train de bâton. Des idées?
Hein???
long
est nécessaire d'aller jusqu'à au moins 2 milliards de dollars, et le 100 000 ème nombre premier est que de 1,3 millions de dollars. Si vous êtes débordant, alors votre programme a manqué un beaucoup des nombres premiers. long
doit être fine (tout comme int
que c'est 32 bits, ce qui est normal). Comparer la sortie de votre programme à ceci: digital.library.upenn.edu/webbin/gutbook/lookup?num=65, voir où ça va mal. Et vérifiez que vous êtes en sortie les valeurs correctement...steve, j'ai fait les modifications proposées et ont toujours les mêmes résultats, c'est parce que je suis en train de monter ces valeurs dans un char tableau[], devrait-il être autre chose?
Vous devez vraiment être à l'aide d'un type entier pour les nombres premiers, pas une représentation à virgule flottante. Je suis d'accord avec Steve Jessop que vous avez probablement un autre problème. Vous devriez essayer de résoudre ce --- j'espère que votre professeur vous marquez une réponse qui utilisé
double
. FWIW, le 100 000 ème le premier est 1,299,709.ouais j'ai compris ce n'était pas mon problème d'origine. Quand j'ai fait ces changements, rien n'a vraiment changé, je ne sais pas ce qui est mal, je soupçonne un char tableau[], ne peut pas tenir les valeurs que je suis en train de bâton. Des idées?
OriginalL'auteur pisfire | 2010-10-10
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser un double avec l'opérateur, vous devez disposer d'un int.
Vous devez:
#include <math.h>
et ensuite utiliser la fonction fmod.Code complet:
Je suis sûr que vous voulez
fmod
, pasmodf
...Oups, merci pour cette remarque.
Merci!!!! Ce message d'erreur sûr ne l'aide pas.
OriginalL'auteur
Vous avez deux options:
Coller avec le
%
opérateur, alors vous êtes nécessaire de jeter les entréesint
sInclure
math.h
et ensuite utiliserfmod
:math.h
sûr ressemble à une solution sympa, +1.OriginalL'auteur Mark Elliot
Votre question immédiate qui peut être résolu avec
fmod
, mais pour les buts de votre haute valeur à des nombres premiers, vous pourriez être mieux de regarder un grand nombre entier de classe, comme ça au http://sourceforge.net/projects/cpp-bigint/ depuis ce que vous voulez vraiment est entier mathématiques, et à l'aide de flotteurs peuvent provoquer des problèmes que les choses progressent.OriginalL'auteur Jon Hanna