Problem z potęgowaniem w języku C

Krzysztof44
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 14 cze 2009, o 21:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy
Pomógł: 12 razy

Problem z potęgowaniem w języku C

Post autor: Krzysztof44 »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
    int i,x;
    for(i=1;i<=5;i++){
    x=pow(10,i);
    printf("x: %d
", x);}
    
        system("PAUSE");
    return 0;
}
    
Program mi wypluwa
x=10
x=99
x=1000
x=9999
x=10000.

Czyli gdy program podnosi 10 do parzystej potęgi podaje wynik mniejszy o 1. Co mam zmienić w tym programiku aby wszystko bylo w porządku? Oczywiście nie nie chodzi mi tu o dodanie warunku if(i%2==0) ...
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Problem z potęgowaniem w języku C

Post autor: matshadow »


widać masz jakiś dziwny kompilator
tobix10
Użytkownik
Użytkownik
Posty: 112
Rejestracja: 6 wrz 2007, o 16:30
Płeć: Mężczyzna
Podziękował: 8 razy
Pomógł: 7 razy

Problem z potęgowaniem w języku C

Post autor: tobix10 »

Dziwne ;), w czym kompilujesz ?
Spróbuj wpisać w pow 10.0 lub 10.0f, bo pow nie jest zdefiniowane dla int'a.
abc666

Problem z potęgowaniem w języku C

Post autor: abc666 »

Nie prościej pomnożyć po prostu niż używać funkcji, która jest do tego nie przeznaczona?
Krzysztof44
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 14 cze 2009, o 21:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy
Pomógł: 12 razy

Problem z potęgowaniem w języku C

Post autor: Krzysztof44 »

Problem rozwiązany. Poprawnie wygląda on tak:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
    int i,x;
    
    for(i=1;i<=5;i++)
    {
    x=(float)pow(10,i);
    printf("x: %d
", x);
    }
    system("PAUSE");
    return 0;
}
Ps. Używam środowiska Dev C++.
Ostatnio zmieniony 21 lis 2010, o 15:12 przez Krzysztof44, łącznie zmieniany 1 raz.
tobix10
Użytkownik
Użytkownik
Posty: 112
Rejestracja: 6 wrz 2007, o 16:30
Płeć: Mężczyzna
Podziękował: 8 razy
Pomógł: 7 razy

Problem z potęgowaniem w języku C

Post autor: tobix10 »

Eh, Dev C++ , nierozwijany staroć, ale i tak spora liczba ludzi go używa.
abc666

Problem z potęgowaniem w języku C

Post autor: abc666 »

Przecież on zachował się poprawnie?! A program jest co najmniej głupio napisany.
Krzysztof44
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 14 cze 2009, o 21:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy
Pomógł: 12 razy

Problem z potęgowaniem w języku C

Post autor: Krzysztof44 »

Nie zachowywał sie tak jak ja tego chciałem. Taki oto program może i jest bez sensu, ale muszę podobnego algorytmu uzyć w innym programie.
PMichalak
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 29 paź 2009, o 20:03
Płeć: Mężczyzna
Lokalizacja: Kalisz
Podziękował: 1 raz
Pomógł: 16 razy

Problem z potęgowaniem w języku C

Post autor: PMichalak »

Pow służy do potęgowania zmiennoprzecinkowego, więc nic dziwnego, że masz takie błędy. Możesz napisać (int)round(pow(a, b)).
To co teraz zrobiłeś to jakiś kosmos. Masz zmienną typu int, a pow rzutujesz z float na float.
Możesz też spojrzeć na algorytm szybkiego potęgowania, może przyda się w Twoim algorytmie.
ODPOWIEDZ