Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Wpisywanie do tablicy liczby z X miejscami po przecinku

Ostatnio zmodyfikowano 2014-06-19 19:24
Autor Wiadomość
killjoy
» 2014-06-15 20:33:16
Moja implementacja tej funkcji, zobacz czy o takie wyniki Ci chodziło:
C/C++
#include <math.h>
#include <cstdio>

//f(x)=3√(log5(x^2−√x))

#define DEF_PRECISION 10

double long setPrecision( double long Var, size_t precision )
{
    long long divideBy = pow( 10, precision );
    long long res = Var * divideBy;
   
   
    return res /( double long ) divideBy;
}

long double log5( long double x )
{
    return log10( x ) / log10( 5.dl );
}

long double function( long double x )
{
   
    long double pow2Res = pow( x, 2.dl );
    long double sqrtRes = sqrt( x );
   
   
   
    if( !setPrecision( pow2Res - sqrtRes, DEF_PRECISION ) )
         return nan( "" );
   
   
    long double logRes = log5( setPrecision( pow2Res - sqrtRes, DEF_PRECISION ) );
   
   
    return( logRes < 0 ? - pow( - logRes, 1 / 3.dl )
        : pow( logRes, 1 / 3.dl ) );
}

int main()
{
   
    for( long double n = - 5; n <= 10; n += 0.1 )
         printf( "f(%Lg) =\t%Lg\n\n", n, function( n ) );
   
   
   
   
}
P-112133
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-15 22:11:21
Czy ten nagłówek nie powinien w C wyglądać trochę inaczej?
#include <cstdio>
P-112140
killjoy
» 2014-06-15 22:30:04
Masz rację, powinno być stdio.h, z przyzwyczajenia napisałem wersję z C++. Powiedz lepiej, czy wyniki są prawidłowe?
P-112142
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-15 23:49:18
Wyniki powinny być takie:

  x   f(x)
-5,0 -------
-4,8 -------
-4,6 -------
-4,4 -------
-4,2 -------
-4,0 -------
-3,8 -------
-3,6 -------
-3,4 -------
-3,2 -------
-3,0 -------
-2,8 -------
-2,6 -------
-2,4 -------
-2,2 -------
-2,0 -------
-1,8 -------
-1,6 -------
-1,4 -------
-1,2 -------
-1,0 -------
-0,8 -------
-0,6 -------
-0,4 -------
-0,2 -------
0,0 -------
0,2 -------
0,4 -------
0,6 -------
0,8 -------
1,0 -------
1,2 -0,8716
1,4 -0,5394
1,6 0,5436
1,8 0,7357
2,0 0,8389
2,2 0,9095
2,4 0,9631
2,6 1,0060
2,8 1,0417
3,0 1,0721
3,2 1,0987
3,4 1,1221
3,6 1,1430
3,8 1,1620
4,0 1,1792
4,2 1,1950
4,4 1,2096
4,6 1,2232
4,8 1,2358
5,0 1,2476
5,2 1,2587
5,4 1,2691
5,6 1,2790
5,8 1,2883
6,0 1,2972
6,2 1,3056
6,4 1,3137
6,6 1,3214
6,8 1,3288
7,0 1,3358
7,2 1,3426
7,4 1,3491
7,6 1,3554
7,8 1,3614
8,0 1,3673
8,2 1,3729
8,4 1,3783
8,6 1,3836
8,8 1,3887
9,0 1,3937
9,2 1,3985
9,4 1,4031
9,6 1,4077
9,8 1,4121
10,0 1,4164
P-112144
Monika90
» 2014-06-16 07:00:44
Nie rozumiem dlaczego tak kombinujecie, to jest kilka linii trywialnego kodu.
C/C++
double log5( double x ) { return log( x ) / log( 5.); }

double f( double x ) { return cbrt( log5( x * x - sqrt( x ) ) ); }

int main()
{
    for( int i = - 50; i <= 100; i += 2 )
         printf( "f(%.1f) = %.4f\n", i / 10., f( i / 10.) );
   
}
P-112148
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-16 21:47:12
Monika90
Wielkie dzięki.
Mogę jeszcze prosić o wytłumaczenie jak to działa. Chcę się upewnić że dobrze myślę.
P-112176
pekfos
» 2014-06-16 21:53:58
Chcę się upewnić że dobrze myślę.
A co myślisz..? Napisz, a my ew poprawimy. Będzie (dla nas) szybciej, niż tłumaczenie kodu, który i tak jest trywialny.
P-112177
cbool10
Temat założony przez niniejszego użytkownika
» 2014-06-19 17:12:46
double log5( double x ) { return log( x ) / log( 5.); }


definicja zmiennej log5 i x jako double, zwrócenie wyniku log(x)/log(5)

double f( double x ) { return cbrt( log5( x * x - sqrt( x ) ) ); }


definicja zmiennej f i x jako double, zwrócenie wyniku cbrt(log5(x*x-sqrt(x)))

C/C++
int main()
{
    for( int i = - 50; i <= 100; i += 2 )
         printf( "f(%.1f) = %.4f\n", i / 10., f( i / 10.) );
   
}

wyświetlenie na ekranie wyników
P-112331
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona