1. Trigonometric function sa Java
Noong nag-aral kami ng rounding numbers kanina, nakilala namin ang Math
klase at ang ilan sa mga pamamaraan nito. Titingnan natin ngayon ang klase na ito nang mas detalyado.
Tulad ng ipinahihiwatig ng pangalan, ang Math
klase ay naglalaman ng mga pamamaraan para sa mga operasyong matematikal na pinakamadalas na ginagamit ng mga programmer. Narito ang mga pinaka-kawili-wili:
Pamamaraan | Paglalarawan | |
---|---|---|
|
Ibinabalik ang sine ng anggulo d , sa radians |
|
|
Ibinabalik ang cosine ng anggulo d , sa radians |
|
|
Ibinabalik ang tangent ng anggulo d , sa radians |
|
|
Ibinabalik ang arcsine | |
|
Ibinabalik ang arccosine | |
|
Ibinabalik ang arctangent | |
|
Ibinabalik ang hyperbolic sine | |
|
Ibinabalik ang hyperbolic cosine | |
|
Ibinabalik ang hyperbolic tangent |
Ang , at mga pamamaraan ay tumatagal ng isang anggulo na ipinahayag sa radians. Upang i-convert ang isang anggulo mula sa mga degree patungo sa mga radian at vice versa, ang klase ay nag-aalok ng dalawang espesyal na pamamaraan:Math.sin()
Math.cos()
Math.tan()
Math
Pamamaraan | Paglalarawan |
---|---|
|
Kino-convert ang isang anggulo mula sa mga degree sa radians |
|
Kino-convert ang isang anggulo mula sa radians sa degrees |
Sa pamamagitan ng paraan, bilang karagdagan sa mga pamamaraan, ang Math
klase ay mayroon ding dalawang pare-parehong mga variable (static na mga patlang ng klase):
pare-pareho | Paglalarawan |
---|---|
|
Ang pare-parehong "Pi" ay katumbas ng3.141592653589793 |
|
Ang pare-parehong "E" ay katumbas ng2.718281828459045 |
Ang lahat ng mga function na ito ay maaaring maging lubhang kapaki-pakinabang sa iyo kung magpasya kang magsulat ng iyong sariling mga laro, magtrabaho kasama ang mga graphics, o simpleng kalkulahin ang haba ng isang landas sa isang mapa.
Halimbawa, kung gusto mong kalkulahin sin(45°)
, narito kung paano mo ito gagawin:
Math.sin( Math.toRadians(45) )
Narito ang isang halimbawa:
public class Main
{
public static int N = 10;
public static void drawValue(double y)
{
int value = (int) (y * N) + N;
for (int i = 0; i < 2 * N; i++)
{
char c = i == N ? '|': '.';
if (i == value)
c = '*';
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args)
{
for (int i = 0; i < 10 * N; i++)
{
double x = i * 1.0 / N;
double y = Math.sin(x);
drawValue(y);
}
}
}
2. Algebraic function sa Java
Sa karamihan ng mga kaso, sapat na ang matematika sa high school para sa isang programmer: kahit na ang mga sine at cosine ay napakabihirang makita sa code. Kadalasan ay kinakailangan ang mga ito kapag nagtatrabaho sa mga laro, mapa o mga makina ng laro. 90% ng mga programmer ay hindi kailanman nakatagpo nito.
Ngunit bukod sa geometry, ang mga programmer kung minsan ay kailangang gumamit ng mga algebraic function. At, siyempre, Math
naglalaman ang klase ng mga pinakakaraniwan:
Pamamaraan | Paglalarawan |
---|---|
|
square root nga |
|
cubic root nga |
|
exponentiation:ab |
|
exponential (napataas ang numero ni Euler sa isang kapangyarihan):ea |
|
natural logarithm ng a :ln(a) |
|
base-10 logarithm ng a :log10(a) |
|
natural logarithm ng x + 1 :ln(x + 1) |
|
ex-1 |
Kung gusto mo ang square o cube root ng isang numero, ang sqrt(a)
at cbrt(a)
mga pamamaraan ay nasa iyong serbisyo.
Ang square root ay maaaring kalkulahin tulad ng sumusunod:
Math.sqrt(2)
Kung nais mong makakuha ng ugat ng isang mas mataas na kapangyarihan, pagkatapos ay gamitin ang paraan ng exponentiation: a
sa kapangyarihan ng ¼
ay ang pang-apat na ugat, atbp.
Math.pow(2, 0.25)
Para sa mga logarithm at exponent, mayroong mga log(a)
(natural na logarithm) at exp(x)
(exponential) na mga pamamaraan. Upang kalkulahin ang base-10 logarithm, mayroon kaming log10(a)
.
Kung gusto mong b
ibase ang logarithm ng isang numero a
, gamitin ang simpleng formula na ito:loga(b) = ln(b) / ln(a)
Mga kapaki-pakinabang na pamamaraan
Kung nagsasagawa ka ng mga kalkulasyon na kinasasangkutan ng napakaliit na halaga ng x
, kung gayon ang huling dalawang function — log1p()
at expm1()
— ay maaaring maging kapaki-pakinabang sa iyo.
Kapag nagdaragdag ng napakaliit at napakalaking double
variable, madalas mong makikita na ang napakaliit na halaga ay binabalewala lang (itinatapon) bilang hindi gaanong mahalaga. Sa katunayan, ito ay mangyayari kung gagamitin mo ang log()
at exp()
mga pamamaraan. Upang malutas ito, ang mga programmer ay gumawa ng mga function na nagbabalik lamang ng "maliit na makabuluhang bahagi"
Halimbawa:
Ipagpalagay na gusto mong kalkulahin ang natural na logarithm ng 1 + x
, where x
is . Hindi mo basta-basta maipapasa ang numerong ito sa pamamaraan, dahil kung idaragdag mo at , makakakuha ka ng . ay napakaliit na numero na ito ay ganap na itatapon kapag ang mga numero ay idinagdag.10-20
log()
1
10-20
1
10-20
Dahil ang matematika ay kadalasang nagsasangkot ng pagkalkula ng log()
mga numerong malapit sa 1
, ang mga programmer ay nakaisip ng isang paraan upang malutas ang problemang ito: sa halip na ipasa ang numero mismo sa pamamaraan, ipasa lamang ang pagkakaiba nito mula sa 1
.
3. Minimum at maximum
Dalawang mas kapaki-pakinabang na function ay min(a, b)
at max(a, b)
. Tulad ng malamang na nahulaan mo na, ibinabalik ng una ang minimum na dalawang numero:
Math.min(a, b)
At ibinabalik ng pangalawa ang maximum na dalawang numero:
Math.max(a, b)
Bakit natin kailangan ang mga function na ito kapag maaari mong palaging magsulat if
o kahit na gamitin ang ternary operator (a < b ? a: b)
?
Ang lahat ay tungkol sa pagiging madaling mabasa ng code. Minsan ang iyong code ay na-overload ng if
mga pahayag at gusto mong gumamit ng mas compact na notation. Ihambing natin:
Code | Paglalarawan |
---|---|
|
Paggamit ng if-else pahayag (ang pinakamahabang paraan ng pagsulat nito) |
|
Gamit ang ternary operator Cons: - napakalaking code - Ang mga kalkulasyon ay isinasagawa nang dalawang beses |
|
Ito ay isang mahusay na paraan upang isulat ito, ngunit ito ay medyo kalabisan |
|
Tama lang 🙂 |
4. Minimum at maximum ng ilang numero
May isa pang mahusay na paraan upang gamitin ang min()
at max()
mga pamamaraan.
Upang kalkulahin ang minimum (o maximum) ng ilang mga numero o variable. Napakaginhawang gumawa ng mga nested na tawag sa mga paraang ito.
Narito kung paano hanapin ang minimum na 3 numero:
Math.min(a, Math.min(b, c))
E ano ngayon? Ito ay sobrang maginhawa: kalkulahin ang minimum na dalawang numero, at pagkatapos ay ibalik ang minimum ng numerong ito at ang ikatlong numero.
Ang minimum na apat na numero ay nakuha sa parehong paraan:
Math.min(a, Math.min(b, Math.min(с, d)))
Iyon ay sinabi, maaari naming isulat ang formula na ito nang mas malinaw:
Math.min(Math.min(a, b), Math.min(c, d))
Ang lahat ay gumagana nang pareho para sa max()
pamamaraan.
Ang paggamit ng if-else
operator o ternary operator ay gagawing mas mahirap ang mga snippet ng code na ito. Ngunit ang paggamit ng min()
at max()
mga pamamaraan ay perpekto lamang.
GO TO FULL VERSION