Trigonometri, tilfeldige tall og mer med innebygde PHP Math Funksjoner

Grunnleggende matematikk brukes mye under programmeringen. Vi må ofte sammenligne, legge til, formere, trekke og dele forskjellige verdier når du skriver kode. 

Noen ganger kan matematikkene som kreves i et program være mer involvert. Det kan hende du må jobbe med logaritmiske, trigonometriske eller eksponentielle funksjoner. I denne opplæringen diskuterer jeg hvordan du bruker hver av disse funksjonene i PHP, med eksempler.

Denne opplæringen vil introdusere deg til de innebygde matematiske funksjonene i PHP for å gjøre beregninger av trigonometri, eksponering og logaritme. Vi vil også se på avrunding og generere tilfeldige tall.

Trigonometriske funksjoner i PHP

Du kan beregne verdien av sinus, cos og tangent av forskjellige vinkler gitt i radianer med sin ($ vinkel), cos ($ vinkel), og tan ($ vinkel). De kommer alle tilbake flyte verdier, og vinkelmålet som er overført til dem, er i radianer.

Dette betyr at når du bare beregner tan (45), du vil ikke få 1 som utgang, fordi du faktisk vil beregne verdien av tangent på 45 radianer, som er ca. 2578 grader. Heldigvis har PHP to svært nyttige funksjoner for å konvertere radianer til grader og omvendt. Disse funksjonene er rad2deg () og deg2rad (). Så, hvis du faktisk vil beregne verdien av tangenten på 45 grader, må du skrive tan (deg2rad (45)).

 Det er bemerkelsesverdig at det ikke er noen direkte PHP-funksjon for å beregne verdien av cosec (), sek (), eller cot (). Disse verdiene er imidlertid bare gjensidige av synd(), cos (), og tan (), slik at du fortsatt kan beregne sine verdier indirekte.

Du kan også gjøre omvendt og beregne vinkelen der en trigonometrisk vinkel har en bestemt verdi. Disse funksjonene kalles som i(), Acos (), og brunfarge(). En ting du må huske er at verdiene til synd og cos aldri kan gå utover rekkevidden -1 til 1 for enhver vinkel. Dette betyr at som i() og Acos () kan bare akseptere verdier i området -1 til 1 som gyldige argumenter. En verdi utenfor dette området vil gi deg NaN.

Trigonometri har mange applikasjoner som å bestemme en projektils bane eller høyder og avstander av forskjellige objekter. Å ha tilgang til disse funksjonene er definitivt nyttig hvis du skriver kode som simulerer disse situasjonene..

Disse funksjonene er også svært nyttige når du vil tegne forskjellige elementer ved hjelp av radiale og vinkelverdier. La oss si at du vil tegne et mønster av sirkler rundt en større sirkel på en jevn avstand. Hvis du har lest PHP GD Shapes-opplæringen på Envato Tuts +, husker du sannsynligvis at tegning av noen former vil kreve at du passerer koordinater i form av x, y koordinater, men tegning av sirkulære mønstre er lettere med polære koordinater.

Ved hjelp av disse trigonometriske funksjonene kan du i dette tilfellet trekke de ønskede tallene ved hjelp av synd() og cos () å konvertere polære koordinater til kartesisk form. Her er et eksempel:

Følgende bilde viser det endelige resultatet av PHP-koden ovenfor.

Eksponentielle og logaritmiske funksjoner

PHP har også noen eksponensielle og logaritmiske funksjoner. De exp ($ verdi) funksjonen vil returnere konstanten e hevet til flyt av flyte $ verdi. På samme måte kan du beregne logaritmen til et gitt nummer til en hvilken som helst base ved hjelp av logg ($ arg, $ base) funksjon. Hvis $ basen utelates, vil logaritmen bli beregnet ved hjelp av den naturlige basen e. Hvis du vil beregne logaritmen til et tall til base 10, kan du bare bruke funksjonen log10 ($ arg).

En annen funksjon som du kanskje finner nyttig er pow ($ base, $ exp), som returnerer $ basen hevet til makten av $ exp. Noen av dere foretrekker kanskje å bruke ** operatør. Uttrykket $ A ** $ b vil gi samme resultat som pow ($ a, $ b). Du kan imidlertid få feil resultater i visse situasjoner med $ A ** $ b. For eksempel, -1 ** 0.5 vil gi deg -1, som er feil. Beregner det samme uttrykket ved hjelp av pow (-1, 0,5) vil gi riktig verdi, NaN.

Andre nyttige matematiske funksjoner

Avrundingsnummer

Det er også mange andre viktige matematiske funksjoner. Du kan rulle fraksjoner eller desimaltall til nærmeste heltall ved hjelp av tak (flyt $ verdi) funksjon. Dette vil konvertere både 2,1 og 2,9 til 3. På samme måte kan du runde brøker eller desimaltall ned til nærmeste heltall ved hjelp av gulv (flyt $ verdi) funksjon. Det vil endre både 2,1 og 2,9 til 2.

Disse funksjonene er gode for å avrunde resultatene av forskjellige beregninger enkelt. La oss si at du trenger å vite hvor mange personer en hall kan ta imot, basert på området. Ditt endelige svar etter divisjonen vil trolig være et desimalnummer, men du kan ikke dele folk i brøker, så det riktige svaret ville være gulvverdien av den beregnede verdien.

Du vil ofte rulle et nummer opp eller ned til nærmeste heltall. For eksempel kan du endre 2.1 til 2, men 2.9 til 3. Dette kan gjøres enkelt ved hjelp av runde ($ verdi, $ presisjon, $ modus) funksjon. De $ presisjon parameteren bestemmer antall desimaler som skal runde til. Standardverdien på 0 vil ganske enkelt returnere heltall. Den tredje $ modus parameter brukes til å bestemme hva som skjer hvis nummeret du vil runde ligger akkurat i midten. Du kan bruke den til å angi om 3,5 skal endres til 3 eller 4.

Minimum og Maksimum

PHP har også to funksjoner kalt min ($ verdier) og max ($ verdier) for å hjelpe deg med å bestemme de laveste og høyeste verdiene i et sett eller en rekke tall. Disse funksjonene kan akseptere ulike typer parametere som to arrays og en streng. Du bør se på dokumentasjonen for å se hvordan de ville bli sammenlignet.

Integer Division

Du kan også utføre integer divisjon i PHP ved hjelp av intdiv ($ dividend, $ divisor) funksjon. I dette tilfellet returneres kun den integrerte delen av kvoten etter en divisjon. På samme måte kan du også få resten eller modulo etter delingen av to argumenter ved hjelp av fmod ($ dividend, $ divisor) funksjon. Den returnerte verdien vil alltid være mindre enn $ divisor i størrelse.

Det er noen andre nyttige funksjoner som is_nan ($ verdi), is_finite ($ verdi) og is_infinite ($ val) som kan brukes til å bestemme om verdien er et tall, og om det er et tall, om det er endelig eller uendelig. Husk at PHP anser enhver verdi som er for stor til å passe i en flyte for å være uendelig. Så is_finite () vil returnere ekte for 100 faktorial men falsk for 1000 faktorial.

Genererer tilfeldige tall i PHP

Tilfeldige tall viser seg å være ganske nyttig i en rekke situasjoner. Du kan bruke dem til å generere "tilfeldige" data for din søknad eller å gyte fiendens forekomster i spill osv. Det er veldig viktig å huske at ingen av funksjonene vi diskuterer i denne delen genererer kryptografisk sikre tilfeldige tall. Disse funksjonene er bare ment å brukes i situasjoner hvor sikkerhet ikke er et problem, for eksempel å vise tilfeldige hilsenstekster for å gjenta besøkende eller for å generere tilfeldige statistiske data.

Funksjonene rand ($ min, $ max) og mt_rand ($ min, $ max) kan generere positive tilfeldige heltall mellom givne verdier, inkludert $ min og $ max verdi. Når funksjonene kalles uten parametere, genererer de tilfeldige tall mellom 0 og getrandmax (). Du kan ekko verdien av getrandmax () for å se det maksimale mulige tilfeldige tallet som disse funksjonene kan generere på plattformen.

Funksjonen mt_rand () er 4 ganger raskere enn rand () og returnerer falsk hvis $ max er mindre enn $ min. Starter fra PHP 7.1.0, rand () har faktisk blitt et alias av mt_rand (). Den eneste forskjellen er det rand () fremdeles gir ikke en feil hvis $ max er mindre enn $ min for å opprettholde bakoverkompatibilitet.

Her er en sløyfe for å generere tilfeldige verdier mellom 0 og 100 en million ganger. Som du kan se, blir verdiene 0, 50 og 100 generert ca 10.000 ganger med små svingninger.

Begge disse funksjonene har også egne sederfunksjoner kalt srand () og mt_srand () å gi et frø for tilfeldige tallgivere. Du bør bare huske på at du bare ringer srand () og mt_srand () en gang i programmet. Ringer dem før hver samtale til rand () og mt_rand () vil gi deg de samme "tilfeldige" tallene hver gang.

Siste tanker

PHP leveres med mange innebygde funksjoner som skal oppfylle alle dine daglige beregningsbehov. Du kan bruke disse funksjonene til å gjøre litt mer kompliserte beregninger som GCD, LCM og factorials selv.

Det er bare et par ting du bør huske når du bruker disse funksjonene. For eksempel, verdien returnert av funksjoner som gulv() og ceil () er et heltall, men det er fortsatt en flyte. På samme måte forventer alle trigonometriske funksjoner at deres vinkler blir gitt i radianer. Du får feil resultater hvis du sender dem en vinkelverdi som du ønsket å bli behandlet som en gradsmåling. Så sørg for at du sjekker returverdien og forventede argumenter for alle disse funksjonene i dokumentasjonen.