[C] Prosty kalkulator liczb rzeczywistych

void_t
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 14 maja 2011, o 18:25
Płeć: Mężczyzna
Pomógł: 26 razy

[C] Prosty kalkulator liczb rzeczywistych

Post autor: void_t »

Dlaczego się skompilowało? No to jest dobre pytanie. Nie jestem w stanie Ci na nie odpowiedzieć.
Mówisz, że nie ma różnicy w precyzji?

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	float resultf;
	double resultd;
	long double resultld;
	
	long double inputld;
	double inputd;
	float inputf;
	printf("Wielkość typów:
long double:	%lu
double:		%lu
float:		%lu
",
		sizeof(long double), sizeof(double), sizeof(float));
	printf("Wprowadź liczbę do pierwiastkowania: ");
	fscanf(stdin, "%Lf", &inputld);
	inputd = (double)inputld;
	inputf = (float)inputld;

	resultf = sqrt(inputf);
	resultd = sqrt(inputd);
	resultld = sqrtl(inputld);

	printf("double:		%.25f
long double:	%.25Lf
float:		%.25f", resultd, resultld, resultf);

	return 0;
}
Przy inpucie 2 wyrzuca wyniki:

Kod: Zaznacz cały

$ ./calc
Wielkość typów:
long double:	16
double:		8
float:		4
Wprowadź liczbę do pierwiastkowania: 2
double:		1.4142135623730951454746219
long double:	1.4142135623730950487637881
float:		1.4142135381698608398437500
Twojego kodu natomiast nie odpalałem, ale za chwilkę to zrobię.

Edit:
Przesadziłem też z długością dokładności, co już poprawiłem. Ale właśnie taki jest problem z liczbami zmiennoprzecinkowymi o stałej ilości bitów - większy wykładnik - mniej dokładna mantysa.
Cóż, dopóki nie zaimplementuje się własnej arytmetyki dowolnej precyzji - musimy polegać na "mało dokładnych" wynikach
M Franek52525
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 3 lut 2011, o 12:51
Płeć: Mężczyzna

[C] Prosty kalkulator liczb rzeczywistych

Post autor: M Franek52525 »

Zrobiłem coś takiego na floacie, ponieważ widzę, że long double jest niezmiernie trudny.
Czy tyle wystarczy?
Jak zrobić powtarzanie się czynności od początku aż do momentu w którym sam będę chciał zakończyć?

Kod: Zaznacz cały

#include <stdio.h>
#include<math.h>
 int main()
 {
   int result,z;
   float x,y;
   printf("x=
");

   do
   {
     result = scanf("%f",&x);
     if (result==1)
     {
       printf("x OK
");
       break;
     }
     else if (result==0) {
       result = scanf("%*s");
     }
   }
   while (result!=EOF);
   printf("y=
");

   do
   {
     result = scanf("%f",&y);
     if (result==1)
     {
       printf("y OK
");
       break;
     }
     else if (result==0) {
       result = scanf("%*s");
     }
   }
    while (result!=EOF);
    if (result==1);
    printf("Wybierz:
1.Plus
2.Minus
3.Razy
4.Przez
5.Koniec
");
    scanf("%d",&z);
    switch (z)
    {
        case 1:
        printf("x+y=%g
",x+y);
        break;
        case 2:
        printf("x-y=%g
",x-y);
        break;
        case 3:
        printf("x*y=%g
",x*y);
        break;
        case 4:
        printf("x/y=%g
",x/y);
        break;
        case 5:
        printf("Koniec
");
        return 0;
        break;
        default:
        printf("Brak opcji
");
        break;
    }
   return 0;
 }
ODPOWIEDZ