[C] Zakres więszy niż long double

0

Witam!

Nie wiem czy to już było na forum ale nie znalazłem. Co należy zrobić,aby program poprawnie liczył np 2^100 W żadnym standardowym zakresie się to nie mieści więc chyba trzeba użyć jakiś inych typów...Gdzie można znaleźć takie biblioteki albo jako to inaczej zrobić?

0

3,4*10^4932 to mało? Astrofizyk?

0
Oleksy_Adam napisał(a)

3,4*10^4932 to mało? Astrofizyk?

z long double nie uzyskasz dokladnego wyniku, jezeli chcesz miec cala liczbe cyfra po cyfrze to musisz zaimplementowac wlasny typ lub poszukac czegos w necie...

0

Oleksy_Adam no w sumie masz racje że trudno to przekroczyć...może zapytam dlaczego to nie działa dla 2^100 a=2;n=100

#include <stdio.h>

int ilmnoz;

long double pot (int a,int n){

 if (n==1) return a;
 else {
  if (n%2!=0) {
   ilmnoz=ilmnoz+2;
   return pot(a*a,n/2)*a;
   }
  else {
   ilmnoz++; 
   return pot(a*a,n/2);
   }
 }
 
}

int main(){

 int a,n;
 
 printf("\nPodaj a:");
 scanf("%d",&a);
 printf("\nPodaj n:");
 scanf("%d",&n);
 
 if ((a<=0)||n<=0) printf("\nDaj inne liczby!\n");
 else {
  printf("\nWynik:%.Lf\n",pot(a,n));
  printf("\nMnozen: %d\n",ilmnoz);
 }
 
  return 0;
 
}

Już działa:

#include <stdio.h>

int il;

long double pot (long double a,int n){

 if (n==1) return a;
 else {
  if (n%2!=0) {
   il=il+2;
   return pot(a*a,n/2)*a;
   }
  else {
   il++; 
   return pot(a*a,n/2);
   }
 }
 
}

int main(){

 int n;
 long double a;
 
 printf("\nPodaj a:");
 scanf("%Lf",&a);
 printf("\nPodaj n:");
 scanf("%d",&n);
 
 if ((a<=0)||n<=0) printf("\nDaj inne liczby!\n");
 else {
  printf("\nWynik:%.Lf\n",pot(a,n));
  printf("\nMnozen: %d\n",il);
 }
 
  return 0;
 
}

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