non valide les opérandes binaires ^ (ont 'double' et 'double')
Je suis plutôt nouvelle pour le codage et ont été la construction d'un code pour interpoler une spline cubique, mais je suis coincé sur la dernière équation faire l'erreur suivante: _"non valide opérandes binaires ^ (ont 'double' et 'double')|"
Le problème est dans le bout de code avec "population =" pour les deux premières lignes. Je serais vraiment reconnaissant si quelqu'un pouvait me diriger dans la bonne direction.
#include <stdio.h>
main () {
int x;
int y;
double stats[10][2];
double gpp[8][9] = {0};
double gppr[10] = {0};
double year;
double population;
int xi = 0;
year=1950;
population=0;
x=0;
stats[0][0] = 1930; stats[1][0] = 1940; stats[2][0] = 1949;
stats[3][0] = 1955; stats[4][0] = 1960; stats[5][0] = 1970;
stats[6][0] = 1980; stats[7][0] = 1990; stats[8][0] = 2000;
stats[9][0] = 2005;
stats[0][1] = 21.058; stats[1][1] = 23.547; stats[2][1] = 20.167;
stats[3][1] = 21.502; stats[4][1] = 24.989; stats[5][1] = 30.852;
stats[6][1] = 37.407; stats[7][1] = 43.390; stats[8][1] = 45.985;
stats[9][1] = 47.041;
//Initiate g'' system of equation
for (x=0;x<8;x++) {
gpp[x][x] = ((stats[x+1][0]-stats[x][0])+(stats[x+2][0]-stats[x+1][0]))/3;
if (x<7) {
gpp[x][x+1] = (stats[x+2][0]-stats[x+1][0])/6;
}
if (x>0) {
gpp[x][x-1] = (stats[x+2][0]-stats[x+1][0])/6;
}
gpp[x][8] = ((stats[x+2][1]-stats[x+1][1])/(stats[x+2][0]-stats[x+1][0]))-((stats[x+1][1]-stats[x][1])/(stats[x+1][0]-stats[x][0]));
}
//Forward sweep
for (x=0;x<7;x++) {
gpp[x+1][x] = 0;
gpp[x+1][x+1] = gpp[x+1][x+1] - (gpp[x][x+1]/gpp[x][x])*gpp[x+1][x];
gpp[x+1][8] = gpp[x+1][8] - (gpp[x][x+1]/gpp[x][x])*gpp[x][8];
}
//Backward sweep
gppr[9] = 0;gppr[0] = 0;
gppr[8] = gpp[7][8]/gpp[7][7];
for (x=7;x > 0;x=x-1) {
gppr[x] = (gpp[x][8]-(gppr[x+1]*gpp[x][x+1]))/gpp[x][x];
}
//check where is xi
for (x=0;x<10;x++) {
if (stats[x][0] > year) {
xi = x;
break;
}
}
//Calculate population at x
population = (gppr[xi]/6)*((((stats[xi+1][0]-year)^3.0)/(stats[xi+1][0]-stats[xi][0]))-(stats[xi+1][0]-stats[xi][0])*((stats[xi+1][0]-year)))
+ (gppr[xi+1]/6)*((((year-stats[xi][0])^3.0)/(stats[xi+1][0]-stats[xi][0]))-(stats[xi+1][0]-stats[xi][0])*((year-stats[xi+1][0])))
+ (stats[xi][1])*((stats[xi+1][0]-year)/(stats[xi+1][0]-stats[xi][0]))
+ (stats[xi+1][1])*((year-stats[xi][0])/(stats[xi+1][0]-stats[xi][0]));
}
J'ai hâte d'en apprendre un peu plus sur le C!
Hugo
On dirait que vous êtes à la recherche pour le
C n'a pas d'exposant de l'opérateur. Pour les exposants entiers, le
pow()
fonction dans math.h
.C n'a pas d'exposant de l'opérateur. Pour les exposants entiers, le
pow
fonction peut être une baisse de rendement (en fonction du compilateur et de la bibliothèque C) que de faire de l'exponentiation par la main.
OriginalL'auteur imacube | 2012-10-03
Vous devez vous connecter pour publier un commentaire.
^
est l'opérateur OU exclusif en C et ne convient pas pour les doubles. C'est un opérateur au niveau du bit et vous pouvez trouver plus de détails sur elle (et les autres opérateurs au niveau du bit) ici.Si vous voulez élever un nombre à la puissance de l'autre, vous avez besoin de la
pow()
fonction.Donc quelque chose comme:
devrait en fait être écrite:
Section
7.12.7.4 The pow functions
de la dernière (C11) norme:OriginalL'auteur paxdiablo
C n'a pas d'exposant de l'opérateur.
^
est l'opérateur XOR, qui ne fonctionne pas sur des nombres non entiers, d'où l'erreur. Utiliser lepow
fonction de la place.OriginalL'auteur chris
Je pense que dans la dernière équation que vous essayez de trouver la fonction de puissance de mathématiques. mais c "^" cet opérateur désigne un ou exclusif. Mieux essayer de #include<math.h>
OriginalL'auteur Debobroto Das