Avatar billede scorp-d Nybegynder
11. september 2006 - 15:38 Der er 15 kommentarer og
1 løsning

Begynderspørgsmål: et program der opløfter en værdi med en anden

Hej...


Jeg sidder lige og piller lidt ved noget C og er stødt ind i et problem, jeg skal opløfte et tal med et andet tal(x^y).
Hvad jeg har lavet indtil er denne while lykke:

while (i <= n)
{
    t=e*e;
    i++;
}

t skal være resultatet når e^n. men når jeg køre programmet og laver en printf siger den at t = 100(hvis e er 10), kan godt se at det er fordi den ikke gemmer og bare ganger 10 med 10 indtil den har gjort det n-gange. Men hvordan løser jeg det problem?

Nogle der kan hjælpe mig..

På forhånd tak
Avatar billede arne_v Ekspert
11. september 2006 - 15:42 #1
pow(x,y)
Avatar billede arne_v Ekspert
11. september 2006 - 15:42 #2
du skal inkludere math.h
Avatar billede scorp-d Nybegynder
11. september 2006 - 15:49 #3
hvordan virker pow(x,y) ? hvordan trækker jeg resultatet ud ?
Avatar billede scorp-d Nybegynder
11. september 2006 - 16:03 #4
int e = 10;
    int n = 100;
    int t = 0;

        t=pow(e,n);

t giver -2147483648.... hvilket jeg ikke lige kan se hvor kommer fra....
Avatar billede rask2 Nybegynder
11. september 2006 - 16:43 #5
en integer er så vidt jeg husker 2 byte svarende til -32768 til 32767 (ca i hvert fald) for signed int. Og så 65535 for unsigned.

dit resultat bliver langt større. Prøv:

int e = 10;
int n = 2;
int t = 0;

t = pow(e,n);
Avatar billede scorp-d Nybegynder
11. september 2006 - 17:30 #6
hmm nu virker det hvis n = 3.... men hvis n = 2 giver det 99, og hvis n=3 giver det 9999....

Prøvede for sjov skyld at se om den kunne 17^7 og det virkede udemærket!!!
Avatar billede arne_v Ekspert
11. september 2006 - 17:57 #7
pow returnerer en double

hvis du skal have en integer så brug

v = (int)(pow(x,y) + 0.5);
Avatar billede scorp-d Nybegynder
11. september 2006 - 18:28 #8
godt ske at det er et dumt spørgsmål men hvorfor står der " + 0.5" til sidst?
Avatar billede arne_v Ekspert
11. september 2006 - 18:35 #9
en almindelig konvertering fra double til float runder ned

hvis pow returnerer 99.999999999999 så vil det blive rundet ned til 99

+0.5 skulle gerne ordne det problem
Avatar billede hardcorewizard Nybegynder
11. september 2006 - 23:37 #10
unsigned int power( unsigned int x, unsigned int y ) {
  if (y == 0)
    return 1;

  unsigned int result = x;
  for (int i=1; i<y; i++)
    result *= x;
  return result;
}

Så slipper man helt for floating point problemer, hvis man alligevel ikke har brug for det.
Avatar billede rask2 Nybegynder
14. september 2006 - 08:39 #11
skal vi have lukket?
Avatar billede michaelpb Nybegynder
19. september 2006 - 15:20 #12
Hej scorp-d,

din første ide er helt fin og ret nem. Du skal bare skrive t*=e; istedet. Dvs:

int pow(int tal, int potens)
{
  int i = 0;
  int ret = 1;
  while (i != potens)
  {
    ret *= tal;
    i++;
  }
  return ret;
}
Avatar billede michaelpb Nybegynder
19. september 2006 - 15:21 #13
Fuck,
jeg så lige at hardcorewizard havde givet den nøjagtig samme løsning. Sorry, my mistake!
Avatar billede rask2 Nybegynder
13. oktober 2006 - 07:46 #14
scorp-d bør du ikke snart få lukket? hvis det altså virker!!
Avatar billede rask2 Nybegynder
07. december 2006 - 15:13 #15
Lukketid??
Avatar billede bauerdata Nybegynder
15. juni 2007 - 18:56 #16
i python
t = x**y
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester