C++ тилинде математика: cmath китепканасы жана сандардын тузактары
Тынч жаңылыш эмес, туура жоопту ал
Негизги идея: C++ математиканы жакшы көрөт, бирок сандардын катуу эрежелери бар.
<cmath> китепканасы сага sqrt жана pow сыяктуу даяр куралдарды берет. Ошол эле учурда бир нече тузак — бүтүн сандарды бөлүү жана майда тегеректөө каталары — программаңды тынчтык менен жаңылыш жооп чыгарууга мажбурлашы мүмкүн. Бул сабак сага куралдарды да, тузактарды да көрсөтөт, ошондо математикаң дайыма туура болот.
Сабактын аягында сен:
<cmath>функцияларын, мисалыsqrt,pow,round,abs,ceilжанаfloor, колдоно аласың,7 / 2эмне үчүн3.5эмес,3берерин түшүндүрө аласың,- калдык операторун
%туура колдоно аласың, - калкыма чекиттүү сандардын тегеректөө катасын жана бүтүн сандын ашып кетишин байкай аласың,
- жооптор туура болуш үчүн туура сандык типти тандай аласың.
1. <cmath> курал жыйнагы
Сен Операторлор жана туюнтмалар сабагынан +, -, * жана / операторлорун билесиң. Бирок квадрат тамырды кантип табасың же санды даражага кантип көтөрөсүң? C++ мындай аракеттерди <cmath> деген курал жыйнагында сактайт. Сен бул жыйнакты файлдын башына бир сап кошуп ачасың:
#include <cmath>
Ал кошулгандан кийин сен бул ыңгайлуу функцияларды чакыра аласың. Ар бирин кичинекей машина катары элестет: сен ага сан бересиң, ал башка санды кайтарат.
| Функция | Эмне кылат | Мисал | Натыйжа |
|---|---|---|---|
sqrt(x) | квадрат тамыр | sqrt(9.0) | 3.0 |
pow(x, y) | x санынын y даражасы | pow(2.0, 3.0) | 8.0 |
abs(x) | модуль (минус белгисин алып салат) | abs(-4) | 4 |
round(x) | эң жакын бүтүн санга тегеректейт | round(2.7) | 3.0 |
ceil(x) | бүтүн санга ЖОГОРУ тегеректейт | ceil(2.1) | 3.0 |
floor(x) | бүтүн санга ТӨМӨН тегеректейт | floor(2.9) | 2.0 |
Мына алар чыныгы программада чогуу иштеп жатышат:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << sqrt(16.0) << endl; // 4
cout << pow(3.0, 2.0) << endl; // 9
cout << abs(-7) << endl; // 7
cout << round(4.6) << endl; // 5
return 0;
}
<cmath> функцияларынын көбү double (ондук) сандар менен иштеп, double кайтарат. Ошондуктан биз жөн эле 16 эмес, 16.0 деп жаздык.