Wiskundige functies van C-taal
De talen C en C++ definiëren veel verschillende wiskundige functies. Aanvankelijk ondersteunden beide talen dezelfde set van 22 wiskundige functies. Naarmate de C++-taal zich ontwikkelde, breidde het arsenaal aan daarin gedefinieerde functies zich echter uit. Dan in de C99-versie de maat wiskundige bibliotheek aanzienlijk toegenomen. Als gevolg van deze veranderingen begonnen de bibliotheken met wiskundige functies van de talen C en C++ aanzienlijk van elkaar te verschillen. Daarom beschrijft dit hoofdstuk de wiskundige functies van de C-taal (inclusief de functies die zijn toegevoegd in versie C99), en richt Hoofdstuk 9 zich uitsluitend op de functies van de C++-taal. Houd er echter rekening mee dat de oorspronkelijke set wiskundige functies nog steeds wordt ondersteund door alle versies van C en C++.
Om alle wiskundige functies te kunnen gebruiken, moet het programma de header bevatten
De volgende macro's zijn gedefinieerd in versie C99.
De C99-versie definieert de volgende macro's (functioneel) die een waarde classificeren.
In versie C99 zijn de volgende vergelijkingsmacro's gedefinieerd, waarvan de argumenten (a en b) drijvende-kommawaarden moeten zijn.
Deze macro's kunnen prima omgaan met waarden die geen getallen zijn, zonder uitzonderingen van het echte type.
De EDOM- en ERANGE-macro's worden ook gebruikt door wiskundige functies. Deze macro's worden gedefinieerd in de koptekst
Fouten in versies C89 en C99 worden anders afgehandeld. Als een argument voor een wiskundige functie in C89 dus niet binnen het domein valt waarvoor het is gedefinieerd, wordt er een implementatiespecifieke waarde geretourneerd en wordt de ingebouwde globale integer-variabele errno ingesteld op de waarde van EDOM. In C99 resulteert een domeinschendingsfout er ook in dat een implementatiespecifieke waarde wordt geretourneerd. De waarde van math_errhandling kan echter aangeven of er andere acties worden uitgevoerd. Als math_errhandling de waarde MATH_ERRNO bevat, wordt de ingebouwde globale integervariabele errno ingesteld op de waarde EDOM. Als math_errhandling de waarde MATH_ERREXCEPT bevat, wordt er een echte uitzondering gegenereerd.
Als in C89 een functie een resultaat genereert dat te groot is om door de representatie te worden verwerkt, treedt er een overflow op. In dit geval retourneert de functie HUGE_VAL en wordt errno ingesteld op de ERANGE-waarde, wat een bereikfout aangeeft. Wanneer er een onderstroom wordt gedetecteerd, retourneert de functie nul en wordt errno ingesteld op ERANGE. In C99 zorgt een overloopfout er ook voor dat de functie een waarde retourneert. HUGE_VAL, en als het aan betekenis verliest: nul. Als math_errhandling de waarde MATH_ERRNO bevat, wordt de globale variabele errno ingesteld op de waarde ERANGE, wat een bereikfout aangeeft. Als math_errhandling de waarde MATH_ERREXCEPT bevat, wordt er een echte uitzondering gegenereerd.
In versie C89 moeten argumenten voor wiskundige functies van het type double zijn en moeten waarden die door functies worden geretourneerd van het type double zijn. In versie C99 zijn float- en long double-varianten van deze functies toegevoegd, die respectievelijk de achtervoegsels f en l gebruiken. In versie C89 is de functie sin() bijvoorbeeld als volgt gedefinieerd.
Dubbele zonde(dubbele arg);
In versie C99 wordt de bovenstaande definitie van de functie sin() ondersteund en zijn er nog twee wijzigingen toegevoegd: sinf() en sinl().
Zweven sinf(zweven arg); lange dubbele sinl(lange dubbele arg);
De bewerkingen die door alle drie de functies worden uitgevoerd, zijn hetzelfde; alleen de gegevens die aan deze bewerkingen worden onderworpen, verschillen. Door f- en 1-wijzigingen aan wiskundige functies toe te voegen, kunt u de versie gebruiken die het beste bij uw gegevens past.
Omdat C99 zoveel nieuwe functies heeft toegevoegd, is het de moeite waard om de functies die door C89 worden ondersteund afzonderlijk op te sommen (ze worden ook gebruikt in C++).
aco's | asin | atan | atan2 | plafond |
want | cosh | exp | fantastisch | vloer |
fmod | frexp | ldexp | loggen | log10 |
modf | poe | zonde | zonde | sqrt |
bruinen | tanh |
En nog iets: alle hoeken zijn gespecificeerd in radialen.
Zie ook
acos - Geeft de boogcosinuswaarde terug
acosh - Retourneert de waarde van de hyperbolische boogcosinus
asin - Retourneert de arcsine-waarde
asinh - Retourneert de hyperbolische boogsinuswaarde
atan - Geeft de boogtangenswaarde terug
atan2 - Geeft de boogtangens van a/b terug
atanh - Geeft de waarde van de hyperbolische boogtangens terug
cbrt - Retourneert de derdemachtswortelwaarde
ceil - Retourneert het kleinste gehele getal dat groter is dan de waarde van het gegeven argument
copysign - Geeft het gegeven argument het teken dat het opgegeven argument heeft
cos - Retourneert de cosinuswaarde
cosh - Retourneert de waarde van de hyperbolische cosinus
erf - Retourneert de waarde van de foutfunctie
erfc - Retourneert een optionele foutfunctiewaarde
exp - Retourneert de exponentwaarde
exp2 - Geeft het getal 2 terug verheven tot de gegeven macht
expm1 - Retourneert de waarde van de natuurlijke logaritme e verminderd met één
Fabs - Retouren absolute waarde
fdim - Retourneert nul of het verschil tussen twee gegeven argumenten
floor - Retourneert het grootste gehele getal dat kleiner is dan of gelijk is aan de waarde van het opgegeven argument
fma - Geeft de waarde van a*b+c gegeven argumenten terug
fmax - Retourneert de grootste van twee waarden
fmin - Retourneert de kleinste van twee waarden
fmod - Geeft de rest van de deling terug
frexp - Pauzes gegeven nummer naar mantisse en exponent
hypot - Geeft de lengte van de hypotenusa terug, gegeven de lengte van twee benen
ilogb - Extraheert exponentiële waarde
ldexp - Retourneert de waarde van de expressie num*2^exp.
De bewerkingen +, -, * en ** zijn gedefinieerd voor gehele getallen. De deling/bewerking voor gehele getallen retourneert echt nummer(betekenis soort vlotter). Ook retourneert de machtsverheffingsfunctie een float-waarde als de exponent een negatief getal is.
Maar er is ook een bijzondere operatie gehele deling, wat wordt uitgevoerd door het fractionele deel weg te gooien, dat wordt aangegeven met // (dit komt overeen met de div-bewerking in Pascal). Het retourneert een geheel getal: het gehele deel van het quotiënt. Een andere gerelateerde bewerking is de bewerking waarbij de rest van de deling wordt genomen, aangegeven met% (dit komt overeen met de mod-bewerking in Pascal). Bijvoorbeeld:
Print(17 / 3) # print 5.66666666667 print(17 // 3) # print 5 print(17 % 3) # print 2
Sommige van genoemde functies(int , round , abs) zijn standaard en vereisen niet dat de wiskundemodule wordt gebruikt.
Functie | Beschrijving |
---|---|
Afronding | |
int(x) | Rondt een getal af naar nul. Dit standaard functie, hoeft u de wiskundemodule niet op te nemen om deze te gebruiken. |
rond(x) | Rondt een getal af op het dichtstbijzijnde gehele getal. Als fractioneel deel getal 0,5 is, dan wordt het getal afgerond naar het dichtstbijzijnde even getal. |
rond(x, n) | Rondt het getal x af op n decimalen. Dit is een standaardfunctie; u hoeft de wiskundemodule niet toe te voegen om deze te gebruiken. |
verdieping(x) | Rondt een getal naar beneden af (“vloer”), met floor(1.5) == 1 , floor(-1.5) == -2 |
plafond(x) | Rondt een getal naar boven af (“plafond”), met ceil(1.5) == 2 , ceil(-1.5) == -1 |
buikspieren(x) | Module ( absolute waarde). Dit is een standaardfunctie. |
Wortels, logaritmen | |
sqrt(x) | Vierkantswortel. Gebruik: sqrt(x) |
log(x) | Natuurlijke logaritme. Wanneer aangeroepen als log(x, b), wordt de logaritme geretourneerd met grondtal b . |
e | De basis van natuurlijke logaritmen is e = 2,71828... |
Trigonometrie | zonde(x) | Sinus van de hoek gespecificeerd in radialen |
cos(x) | Cosinus van de hoek gespecificeerd in radialen |
bruin(x) | Raaklijn van de hoek, gespecificeerd in radialen |
asin(x) | Arcsine, retourneert de waarde in radialen |
akoes(x) | Boogcosinus, retourneert de waarde in radialen |
atan(x) | Boogtangens, retourneert de waarde in radialen |
atan2(y, x) | Polaire hoek (in radialen) van een punt met coördinaten (x, y). |
graden(x) | Converteert een hoek opgegeven in radialen naar graden. |
radialen(x) | Converteert een hoek die is opgegeven in graden naar radialen. |
pi | Constante π = 3.1415... |
Alle wiskundige functies vereisen een header
1 | aco's | Functie dubbele acos(dubbel arg arg |
2 | asin | Functie dubbel asin (dubbel arg) retourneert de boogcosinus van het argument arg. De waarde van het functieargument moet tussen -1 en 1 liggen, anders treedt er een fout op. |
3 | atan | Functie dubbel atan(dubbel arg) retourneert de boogtangens van het argument arg. |
4 | atan2 | Functie dubbel atan2(dubbel X, dubbel j) retourneert de boogtangens van de waarde j/X. |
5 | plafond | Functie dubbel plafond (dubbel num) retourneert het dichtstbijzijnde gehele getal (weergegeven als een reëel getal met drijvende komma) dat dat niet is minder dan waarde argument num. Ceil(1.02) retourneert bijvoorbeeld 2.0. Deze conversie wordt overafronding genoemd. |
6 | want | Functie dubbele cos(dubbel arg) retourneert de cosinus van het argument arg |
7 | cosh | Functie dubbele cosh (dubbel arg) retourneert de hyperbolische cosinus van het argument arg. |
8 | exp | Functie dubbele exp(dubbel arg) retourneert de basis van de natuurlijke logaritme e, tot een macht verheven arg. |
9 | fantastisch | Functie dubbele fabs (dubbel num) retourneert de absolute waarde (modulowaarde) van het argument num. |
10 | vloer | Functie dubbele bodem(dubbel num) retourneert het grootste gehele getal (weergegeven als een reëel getal met drijvende komma) dat niet groter is dan de waarde van het argument num. floor(1.02) retourneert bijvoorbeeld het getal 1.0. Deze conversie wordt afronding naar beneden genoemd. |
11 | fmod | De functie dubbel fmod(dubbel x, dubbel y) retourneert de rest van deling x/y. |
12 | frexp | Functie dubbele frexp(dubbel num, int * exp) breidt een getal uit num door een mantisse variërend van 0,1 tot 1, exclusief 1, en een gehele exponent, dus num = mantisse. De functie retourneert de mantisse en de waarde van de exponent wordt opgeslagen in de variabele waarnaar de aanwijzer verwijst exp. |
13 | loggen | Functie dubbele log (dubbel num) retourneert natuurlijke logaritme cijfers num. Als de argumentatie num |
14 | log10 | Functie dubbele log10(dubbel num) retourneert de decimale logaritme van een getal num. Als de argumentatie num negatief of gelijk aan nul, er treedt een fout op. |
15 | poe | Functie dubbele pow (dubbel baseren, dubbel exp) retourneert een getal baseren, tot de macht verheven exp. Als de basis van het diploma baseren gelijk is aan nul, en de exponent exp kleiner is dan of gelijk is aan nul, kan er een fout optreden doordat het argument het domein van de functiedefinitie verlaat (domeinfout). Deze fout treedt ook op als het argument baseren is negatief en het argument exp is geen geheel getal. |
16 | zonde | Functie dubbele zonde(dubbel arg) retourneert de sinus van het argument arg. De argumentwaarde moet worden uitgedrukt in radialen. |
17 | zonde | Functie dubbele sinh (dubbel arg) retourneert de hyperbolische sinus van het argument arg. |
18 | sqrt | Functie dubbele sqrt(dubbel num) retourneert vierkantswortel argument num. Als het argument negatief is, treedt er een fout op omdat de functie buiten het bereik valt. |
19 | bruinen | Functie dubbele tan(dubbel arg) retourneert de tangens van het argument arg. De argumentwaarde moet worden uitgedrukt in radialen. |
20 | tanh | Functie dubbele tanh (dubbel arg) retourneert de hyperbolische tangens van het argument arg. |
De volgende rekenkundige operatoren zijn gedefinieerd in C++.
Toevoeging;
– aftrekken;
* vermenigvuldiging
/ divisie
% modulo-verdeling
– – verlagen (verlagen met 1)
Verhogen (verhogen met 1).
De actie van de operatoren +, –, * en / valt samen met de actie van soortgelijke operatoren in de algebra. Ze kunnen worden toegepast op elk ingebouwd numeriek gegevenstype.
Nadat de delingsoperator (/) op een geheel getal is toegepast, wordt de rest weggegooid. Het resultaat van de deling van gehele getallen 10/3 is bijvoorbeeld 3. De rest van de deling kan worden verkregen met behulp van de modulo (%) operator. 10%3 is bijvoorbeeld 1. Dit betekent dat in C++ de operator % niet kan worden gebruikt voor niet-gehele gegevenstypen.
De operatoren voor verhogen (++) en verlagen (– –) hebben zeer interessante eigenschappen. Daarom moeten ze speciale aandacht krijgen.
De operator voor verhogen telt het getal 1 op bij zijn operand, en de operator voor verlagen trekt 1 af van zijn operand. Dit betekent dat de instructies:
vergelijkbaar met deze instructie:
En de instructies:
vergelijkbaar met deze instructie:
De operatoren voor verhogen en verlagen kunnen vóór hun operand (voorvoegselvorm) of erna (postfixvorm) verschijnen. Bijvoorbeeld instructies
kan worden herschreven als een voorvoegsel
X;//voorvoegselvorm van de ophoogoperator
of postfix-formulier:
x++;//postfix-vorm van de increment-operator
In het vorige voorbeeld maakte het niet uit of de increment-operator in prefix- of postfix-vorm werd gebruikt. Maar als de operator voor verhogen of verlagen wordt gebruikt als onderdeel van een grotere uitdrukking, dan is de vorm waarin deze wordt gebruikt erg belangrijk. Als een dergelijke operator wordt gebruikt in voorvoegsel vorm, dan zal C++ deze bewerking eerst uitvoeren, zodat de operand een nieuwe waarde krijgt, die vervolgens door de rest van de expressie zal worden gebruikt. Als de operator in postfix-vorm wordt gebruikt, gebruikt C++ de oude waarde in de expressie en voert vervolgens een bewerking uit die ervoor zorgt dat de operand de nieuwe waarde aanneemt.
Wiskundige functies
De taal C++ heeft speciale functies voor het berekenen van algebraïsche uitdrukkingen. Al dergelijke functies zijn opgenomen in een afzonderlijk headerbestand, math.h. Om functies in de programmacode te kunnen gebruiken, moet u daarom verbinding maken dit bestand gebruik maken van richtlijn
#erbij betrekken
Hier zijn de fundamentele algebraïsche functies van C++.
abs(x) - modulus van een geheel getal;
labs(x) - module van een “lang” geheel getal;
fabs(x) - modulus van een drijvende-kommagetal;
sqrt(x) - wortelextractie;
pow(x,y) - x verheffen tot de macht y;
cos(x) - cosinus;
zonde(x) - sinus;
tan(x) - raaklijn;
acos(x) - boogcosinus;
asin(x) - boogsinus;
atan(x) - boogtangens;
exp(x) - exponent van de macht x;
log(x) - natuurlijk logaritme;
log10(x) - decimale logaritme
Wanneer je een getal verheft tot een fractionele macht, moet de noemer van de fractionele macht in reële vorm worden geschreven. Bijvoorbeeld: de vierkantswortel van a wordt als volgt geschreven: pow(a,1/ 2.0 )
Laten we het gebruik van functies demonstreren met voorbeelden.
5. I/O-operatoren in C++
Om een bericht op het scherm weer te geven, gebruikt u de volgende C++-instructie:
uit<<”текст”;
#erbij betrekken
De informatie tussen dubbele aanhalingstekens is het bericht dat op het scherm moet worden weergegeven. In C++ wordt elke reeks tekens tussen dubbele aanhalingstekens een string genoemd, omdat deze uit verschillende tekens bestaat die met elkaar zijn samengevoegd om een groter blok (element) te vormen.
De regel in de COUT-instructie kan zogenaamde jokertekens bevatten: tekens die niet op het toetsenbord voorkomen of die worden gebruikt voor sleuteltekens in de programmatekst. Elk dergelijk jokerteken wordt voorafgegaan door een teken "\".
Hier is een lijst met dergelijke symbolen:
\a – geluidssignaal
\n – ga naar nieuwe regel
\t – horizontaal tabblad
\v – verticale tab
\\ - backslash
\’ – enkel aanhalingsteken
\” – dubbel aanhalingsteken
\? – vraagteken.
Een operator zoals:
cout>>“voorbeeld\ntekst”;
Het woord "voorbeeld" verschijnt op de ene regel en het woord "tekst" op de andere.
Operator van het formulier:
cout>>“winkel\””meeuw\””;
Het woord "Seagull" wordt tussen dubbele aanhalingstekens weergegeven.
Naast tekst kan de operator de waarden van variabelen op het scherm weergeven en deze combineren met tekst.