Potęgi w c++ - dziwne błędy

0

Witam wszystkich, to mój pierwszy post ;)

Mój problem polega na tym, że funkcja pow(potęgowanie) nie działa tak jak trzeba.
Chodzi o to, że w moim programie podnoszę liczby do części ułamkowych (tworzę
pierwiastki)
np:

double liczba = 112;
double licznik = 1;
double mianownik = 4;
double potega = licznik/mianownik;
double wynik = pow(liczba , potega);

w samym tym kodzie działania są wykonywane bez problemu, jednak musiałem
napisać jeszcze jeden program, który znajduje mi najbliższą liczbę przez którą
można wykonać działania bez reszty. Tzn podaje programowi 25^1/3. Jak wiadomo
nie istnieje taka stała liczba, więc program wyszukuje mi najbliższej liczby która
pozwala na takie działanie. W tym przypadku jest to 27, bo 27^1/3=3.

Kod który wyszukuje taką liczbe:

double przyblizenie(double liczba, double potega)
{
    double wynik = pow( liczba , potega );
    int stala = wynik;
    if(wynik - stala == 0) return liczba;
    else return przyblizenie(liczba + 1, potega);
}

jest to funkcja rekurencyjna, podnosi liczbę o 1, aż do momentu kiedy działanie
nie da żadnej reszty(jeśli 25 daje reszte, to sprawdza 26 itd..) No i tu jest problem,
bo niektóre pierwiastki działają, a niektóre nie. Akurat 251/3 działa, ale np. 1121/3 nie działa.

Proszę o pomoc, jestem słaby z programowania, nie wiem na razie co zrobić, aby
program stabilnie działał, ale może jakiś pros z forum wie ;)

PS. sprawdzałem różne liczby i nie ma reguły w ich działaniu, niektóre skomplikowane
jak np. 57^9/4 działają O.o

Może podam jeszcze cały kod do prześledzenia i potestowania:

#include<iostream>
#include<string>
#include<math.h>

using namespace std;

double przyblizenie(double liczba, double potega)
{
    double wynik = pow( liczba , potega );
    int stala = wynik;
    if(wynik - stala == 0) return liczba;
    else return przyblizenie(liczba + 1, potega);
}

int main()
{
   double licznik = 1.0;
   double mianownik = 4.0;
   double liczba = 112.0;
   double potega = licznik/mianownik;
   double wynik = przyblizenie(liczba,potega);
   cout << "Wartosc przyblizona liczby wynosi: " << wynik << endl;
   return 0;
}

dodanie znaczników <code class="cpp"> oraz poprawienie tytułu wątku i tagów - fp

0

@mirai002 - skoro to Twój pierwszy post pamiętaj o tym, by tytuł wątku sensownie opisywał Twój problem; Jeśli uzupełniasz taki wątku to nie dodawaj tam takich słów jak problem, bo skoro tutaj piszesz to oczywiste jest, że z czymś masz problem;

Ponadto zawsze wstawiaj kod do znaników kolorujących składnię - tutaj podajesz kod napisany w C++, więc wstaw go pomiędzy znaczniki <code class="cpp"> a </code>; Dzięki temu kod łatwo będzie analizować i szybciej będzie można Tobie pomóc.

1
#include <iostream>
#include <cmath>
using namespace std;

int main()
  {
   double licznik=1,mianownik=4,liczba=112;
   cout<<"Wartosc przyblizona liczby wynosi: "<<pow(round(pow(liczba,licznik/mianownik)),mianownik/licznik)<<endl; // najbliższa
   cout<<"Wartosc przyblizona liczby wynosi: "<<pow(ceil(pow(liczba,licznik/mianownik)),mianownik/licznik)<<endl; // najbliższa większa
   return 0;
  }
0

Wielkie dzięki, o to właśnie chodziło, przepraszam za błędy w składni posta : I

1 użytkowników online, w tym zalogowanych: 0, gości: 1