Ahoj potřeboval bych poradit ohledně těchto f-cí. Jakto že když zadám např sin(2)
tak mi to hodí nesmyslené číslo v podobě 0.898cosi ? To samé u jiných f-cí ? Díky.
Fórum › C / C++
F-ce Sin, Cos ...
tak jsem myslel že není v tomto případě důležitý, ale už jsem na to přišel:
printf ...... sin(45*pi/180).
--------------------
problém mám ale stejně mám napsat f-ci sin pomoci rozvoje :
sin(x)=x - x^3/3! + x^5/5! - x^7/7! + .....
no a zaboha mi to nechce házat ty správné čísla !!
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535
double fact(double n)
{
double x=1;
for(;n>0;n--)
x*=n;
return x;
}
double sine(double x) /*v radianoch*/
{
double y=0;
int i;
for(i=0;i<=30;i++) { /*nemam sajnu po jake cislo sa ten faktorial zmesti do double, len som tresol...*/
if(i%2 == 0)
y+=pow(x, 2*i+1)/fact(2*i+1);
else
y-=pow(x, 2*i+1)/fact(2*i+1);
}
return x;
}
int main()
{
printf("%f %f \n", sin(30*PI/180), sine(30*PI/180));
return 0;
}
Problem je, ze 30 neni nekonecno ;) a keby aj je, tak sa tie faktoraily nezmestia ani do 500MB a nieze do 64b ;).
To ako to robi sin() nemam sajnu...
Nj, naprogramovat takovy pow je desne slozity :-)
Dovolil jsem si z f-ce sin odstranit to modulo, jelikoz to je desne narocna operace ;-)
#include "iostream"
using namespace std;
double pow(double num, int exp){
double ret = 1;
for(int i=0; i<exp; i++){
ret *= num;
}
return ret;
}
double fakt(int n){
double x = 1;
while(n>1){
x *= n;
n--;
}
return x;
}
double sin(double rad){
double ret = rad;
int plus = -1;
for(int n=3; n < 300; n+=2, plus*=-1){
ret += plus * pow(rad, n) / fakt(n);
}
return ret;
}
int main(){
cout << sin(90*3.14/180) << endl;
return 0;
}
Pockat, ty jsi chces napsat sam f-ci na sin nebo to chces vedet pouze ze zvedavosti?Pokud si ji sam chces napsat, tak ti doporucuji toho nechat.Je to tezke a navic nemusi byt tak rychla jako f-ce sin v hlavicce <math>
To Martin : hmm tak co treba tohle :
#include <math.h>
double noob_fce (double uh){ return sin(uh);}
??? zvladnes to ???
na vzdory vsem ocekavanim a predpokladum totiz slouzi ke spocitani sinu "prikaz" sin.
jo a sin 45stupnu je 2 na (-1/2)
Ja bych to chtěl udělat nějak takhle jestli je to možné ?
#include <math.h>
#include <stdio.h>
int main(void)
{
int uh;
scanf("%d", &uh);
double sin (double uh){ return sin(uh);}
/*tady je ta fela*/
return 0;
}
tam pravě nevim jak vypsat hodnotu toho sinu
To Martin : nejdriv se prosim nauc aspon zaklady programovani. viditelne nechapes ani zaklady vystupu programu, ani mechanizmu funkci. tohle jsou veci ktere si muzes precist tady na webu v serialu. tak s tim prosim neotravuj zde na foru, ktere by melo slouzit vecem ktere v serialech postihnout nelze.
Spíš mu asi blbě radíte a matete ho.
Martin: Jak říká byF je to v radianech, to znamená že místo stupnů (degrees) ti vysledek vyjede v částech PI. Čili 360° = 3.1415. Takže aby jsi převedl výsledek na stupních, musíš vynásobyt asi tímto 57.29578
takže si vytvoř nějakou takovoudle funkci:
double ToDegrees(double num){
return num * 57.29578;
};
int main(){
cout<<"uhel : "<<ToDegrees(sin(2));
return 0;
};
Tohle by ti už mělo vypsat správně a dál si s tim snad poradíš.
To Tomas_Dejmek : hmm kdyz sme u toho mateni tak 360° rozhodne neni 3.1415, ale zhruba dvakrat tolik (ale ten koeficient nasobeni je zhruba spravne tak predpokladam ze jste se jen prepsal). no ale myslim si ze problem uzivatele Martina neni jen v tomto - staci pohled do zdrojoveho kodu v .
navic on(Martin) potrebuje zjistit ciselnou hodnotu fce sin pro nejaky uhel (alespon tak jsem to pochopil), tedy potrebuje prevod opacny.
to Tmi: Chybu v kodu mám to přopouštím, je to i logické, protože mi to nefunguje. Ale zajímalo by mě jakou, abych ji mohl odstranit a neptat se někde jinde. jinak máte pravdu já potřebuju číselnou hodnotu sinu pro určitý úhel.
To Martin : ciselnou hodnotu lze ziskat zavolanim funkce sin s parametrem ktery odpovida velikosti uhlu v radianech - je tedy nejprve treba prevest z uhlu na radiany.
jak naznacil Tomas_Dejmek , lze k tomu pouzit jednoduchy hruby mechanizmus nasobeni velikosti uhlu ve stupnich koeficientem (180/3,14).
vse potrebne k implementaci takovehoto programu naleznete v tutorialu C/C++ na tomto portalu.
Martin napsal:
Ja bych to chtěl udělat nějak takhle jestli je to možné ?
#include <math.h>
#include <stdio.h>
int main(void)
{
int uh;
scanf("%d", &uh);
double sin (double uh){ return sin(uh);}
/*tady je ta fela*/
return 0;
}
tam pravě nevim jak vypsat hodnotu toho sinu
Co to je za syntax deklarovat funkciu vo funkcii a este k tomu rekurzivnu... :-o
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vypočet SIN pomocí mocniné řady — založil Hans
Výpočet sin(x) bez knihovny math.h — založil hasky
Moderátoři diskuze