Problem z zapisem pierwiastków w programie matematycznym

0

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.

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.

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