Cześć wszystkim,
mam problem z zapisem pierwiastków w c++, w programie matematycznym. Otóż, w matematyce, czasem podczas obliczeń mnoży się przez "pierwiastek z 2", a nie przez 1.414.., a mój program mnoży przez 1.414... Chciałbym, żeby wynikiem działania, które oblicza program, nie była jakaś "nieprzyjemna" liczba, tylko np. "14 sqrt 2". Zapis tego wyniku jest w zasadzie dowolny, liczy się tylko to, aby program nie obliczał pierwiastków, których wynik nie jest liczbą całkowitą i zapisywał je w jakiś niezbyt skomplikowany sposób.
0
1
Jeśli potrzeba Ci tylko pierwiastków z dwóch i żadnych innych liczb niewymiernych (tzn. pracujesz w Q(2^(1/2))), to możesz w miarę szybko i łatwo naklepać swoją własną klasę realizującą co trzeba.
A jakbyś potrzebował czegoś więcej, to możesz się zainteresować jakąś biblioteką do obsługi liczb algebraicznych, np. Givaro. (jedyna z której sam korzystałem, nie wiem czy nie ma innych, lepszych — głównym problemem tej jest wybitnie szczątkowa dokumentacja)
0
Witam.
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
cout<<setprecision(1)<<sqrt(14);
}
Wynik wynosi 4 jak podamy 14 ale nie wiem czy o taki wynik obliczeń chodzi.
Życzę miłego dnia.
0
Rozwiązaniem byłoby napisać parser wyrażeń arytmetycznych, dokładając operator unarny, nazwijmy go 2SQRT
, który:
- działając na pierwiastki, zwracałby wynik zgodny z zasadami działań, np.:
2SQRT(sqrt(32)) = 8
; - przy aplikowaniu go do liczb lub wyrażeń, "przyklejalibysmy" go (w sensie konkatenacji stringów):
2SQRT(5) -> 2SQRT5
.