pierwiastkowanie c++

0

Mam problem, ponieważ piszę sobie (Tak dla siebie) kalkulator i chcę tam dodać pierwiastki dowolnego stopnia

Mam funkcję void wyglądającą tak:

 void pierwiastkowanie()
{
	float liczba;
	float stopien;
	cout << "Wybrales pierwiastkowanie: \n"
		 << "Wprowadz liczbe ktora chcesz spierwiastkowac: "; cin >> liczba;
	cout << "Wprowadz do ktorego stopnia jest pierwiastek: "; cin >> stopien;
	/*********************************************
	!!!! Wypisywanie wyniku na konsole - Do zrobienia !!!!
	*********************************************/
	cin.ignore();
	cin.get();
}

no i mam problem ponieważ ja totalnie nie wiem jak napisać tą funkcję ?? (Jestem początkującym programistą)

2
#include <cmath> 
// ...
float pierwiastek = std::pow(liczba, 1.0 / stopien);

No np. tak.

\sqrt[n]{x} ,=, x^{\frac{1}{n}}

0

Coś mi nie działa ;/ mam takie błędy:

1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(583): could be 'long double pow(long double,int)'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(581): or       'long double pow(long double,long double)'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(535): or       'float pow(float,int)'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(533): or       'float pow(float,float)'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(497): or       'double pow(double,int)'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(122): or       'double pow(double,double)' 

biblioteke cmath mam dodaną ;/ więc nie wiem co mogło by być źle ;/

1

A jak dasz 1.0f zamaist 1.0?

Ciekawe. Wynikiem tego dzielenie dla 1.0 będzie double. Więc mamy wywołanie pow(float, double). Kto mi powie, dlaczego nie ma po prostu promocji i wywołania pow(double, double)?

0

Po dodaniu f do 1.0 działa :D <jupi>

Dzięki :D

0

Ogólnie odpowiedź @Endrju pozwoli Ci skompilować program, ale nie wiesz gdzie robisz błąd (jakby co tutaj jest mniej winy twojej, więcej języka). Domyślnym typem liczb zmiennoprzecinkowych (i literałów) w C i C++ jest double (co niekoniecznie znaczy, że obliczenia nie mogą być przeprowadzone z większą dokładnością). Jeżeli przypisujesz literał double do zmiennej float, to jest on wtedy automatycznie do niej skracany. Z kolei wynik obliczeń dwóch różnych typów zmiennych jest rozszerzany do większego typu, w przypadku tego dzielenia jest to double reprezentowany przez 1.0 (nie wiem, czy jestem tutaj w 100% poprawny).

Chcesz teraz wywołać funkcję pow. Nie jest to jednak w C++ tylko jedna funkcja, ale ma ona szereg przeładowań, które widzisz w komunikacie kompilatora. I teraz biedny kompilator nie wie czy chcesz wywołać pow(double, double), czy pow(float, float), czy coś zupełnie innego, a nie ma w dostępnych przeładowaniach pow(float, double), mimo że wyniki obydwu funkcji będą bardzo podobne, szczególnie po zapisaniu do float.

Nie ma żadnego powodu do stosowania pojedynczych zmiennych float zamiast double (nie mówię tutaj o tablicach, szczególnie jak dochodzi jeszcze SIMD). Obliczenia i tak najprawdopodobniej będą przeprowadzone z większą dokładnością, nawet możliwe, że z większą niż double.

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