Pinky2 Skrevet 29. januar 2009 Del Skrevet 29. januar 2009 (endret) Arrh..hva er galt med denne sekvensen ? x = (-b+sqrt(pow(b,2.0)-(4.0*a*c))) / d; Endret 29. januar 2009 av Pinky2 Lenke til kommentar
nercix Skrevet 29. januar 2009 Del Skrevet 29. januar 2009 Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil? Lenke til kommentar
Pinky2 Skrevet 29. januar 2009 Forfatter Del Skrevet 29. januar 2009 Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil? nei, virker som det er "4.0*a*c" som er problemet.. Lenke til kommentar
jebreimo Skrevet 29. januar 2009 Del Skrevet 29. januar 2009 Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil? nei, virker som det er "4.0*a*c" som er problemet.. Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien. Lenke til kommentar
Pinky2 Skrevet 30. januar 2009 Forfatter Del Skrevet 30. januar 2009 Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil? nei, virker som det er "4.0*a*c" som er problemet.. Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien. Ok, hvordan angir jeg absoluttverdi for 4ac ? Lenke til kommentar
nercix Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil? nei, virker som det er "4.0*a*c" som er problemet.. Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien. Ok, hvordan angir jeg absoluttverdi for 4ac ? Bruk abs() i cstdlib ev. cmath. Lenke til kommentar
Pinky2 Skrevet 30. januar 2009 Forfatter Del Skrevet 30. januar 2009 (endret) Bruk abs() i cstdlib ev. cmath. Takk Arrh, programmet funker likevel ikke Endret 30. januar 2009 av Pinky2 Lenke til kommentar
NevroMance Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Tar du abs av 4ac vil det jo ofte gi feil regnestykke, og dermed ikke rart det ikke fungerer. Fungerer programmet ditt hvis b^2 > 4ac? sjekk dette først. Hvis det ikke fungerer da er det noe galt et sted. Hvis du vil det skal funke hvis b^2 < 4ac også er du nødt til å lage din egen sqrt funksjon som tar for seg negative røtter. Er ikke veldig vanskelig, raskt rasket sammen eksempel som ikke er sjekket men tror det skal funke. double mysqrt(double a) { double ans = 1; if(a < 0) { ans = -1; a *= -1; } ans *= sqrt(a); return ans; } Hvis du får tilbake en negativ rot vet du at det egentlig er den positive roten gangen i (altså roten av -1). sqrt vil aldri returnere et negativt tall, så dette skal fungere fjell. Kan selvsagt gjøre det på andre måter også, ved å f. eks. bruke en string, men dette er vel den enkleste måten. Lenke til kommentar
Pinky2 Skrevet 30. januar 2009 Forfatter Del Skrevet 30. januar 2009 Tar du abs av 4ac vil det jo ofte gi feil regnestykke, og dermed ikke rart det ikke fungerer. Fungerer programmet ditt hvis b^2 > 4ac? sjekk dette først. Hvis det ikke fungerer da er det noe galt et sted. Hvis du vil det skal funke hvis b^2 < 4ac også er du nødt til å lage din egen sqrt funksjon som tar for seg negative røtter. Er ikke veldig vanskelig, raskt rasket sammen eksempel som ikke er sjekket men tror det skal funke. double mysqrt(double a) { double ans = 1; if(a < 0) { ans = -1; a *= -1; } ans *= sqrt(a); return ans; } Hvis du får tilbake en negativ rot vet du at det egentlig er den positive roten gangen i (altså roten av -1). sqrt vil aldri returnere et negativt tall, så dette skal fungere fjell. Kan selvsagt gjøre det på andre måter også, ved å f. eks. bruke en string, men dette er vel den enkleste måten. Ok. Men det funker ikke hvis b^2 > 4ac heller, men hvis jeg tok vekk 4ac såg det ut til å funke, men da blir regnestykket feil, håper jeg får dette til i kveld. Lenke til kommentar
NevroMance Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Hmmm... det er merkelig. Du kan jo eventuelt poste koden din her, så er det sikkert noen her som klarer å se hvorfor det ikke funker. Hva er forresten feil? Du får kompilert, men den regner ut feil? Lenke til kommentar
jebreimo Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Ok. Men det funker ikke hvis b^2 > 4ac heller, men hvis jeg tok vekk 4ac såg det ut til å funke, men da blir regnestykket feil, håper jeg får dette til i kveld. Jeg tror tiden er inne til å vise oss koden din, har en mistanke om at du tar absolutt verdien til "4ac" og ikke "b^2 - 4ac". Uansett, dette går vel ut på å finne røttene til et andregradspolynom? I så fall må du sjekke om polynomet faktisk har røtter ved å sammenligne b^2 og 4ac før du tar kvadratroten av differansen. Lenke til kommentar
Raring Skrevet 1. februar 2009 Del Skrevet 1. februar 2009 int main () { float a = 3; float b = -4; float c = 1; float d = sqrt(pow(b, 2) - (4 * a * c)); if (d < 0) cout << "Ingen løsninger" << endl; else if (d == 0) cout << "X = " << (-b / 2 * a) << endl; else if (d > 0) { cout << "X = " << (-b + d) / (2 * a) << endl; cout << "X = " << (-b - d) / (2 * a) << endl; } return 0; } Denne burde funke. Med tanke på din, hvorfor bruker du 'd' i stedet for 2 * a? Er du sikker på at disse er like store? Lenke til kommentar
NevroMance Skrevet 1. februar 2009 Del Skrevet 1. februar 2009 int main () { float a = 3; float b = -4; float c = 1; float d = sqrt(pow(b, 2) - (4 * a * c)); if (d < 0) cout << "Ingen løsninger" << endl; else if (d == 0) cout << "X = " << (-b / 2 * a) << endl; else if (d > 0) { cout << "X = " << (-b + d) / (2 * a) << endl; cout << "X = " << (-b - d) / (2 * a) << endl; } return 0; } Denne burde funke. Med tanke på din, hvorfor bruker du 'd' i stedet for 2 * a? Er du sikker på at disse er like store? Her forsøker du jo å ta roten av et negativt tall. Heller noe ala: int main () { float a = 3; float b = -4; float c = 1; float d = pow(b, 2) - (4 * a * c); if (d < 0) cout << "Ingen løsninger" << endl; else if (d == 0) cout << "X = " << (-b / 2 * a) << endl; else if (d > 0) { cout << "X = " << (-b + sqrt(d)) / (2 * a) << endl; cout << "X = " << (-b - sqrt(d)) / (2 * a) << endl; } return 0; } Da forsøker du ikke å ta roten av et negativt tall. Lenke til kommentar
Raring Skrevet 1. februar 2009 Del Skrevet 1. februar 2009 Jo, selvfølgelig. Er ikke helt sikker hvordan den slapp gjennom sikkerhetstestingen min. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå