4.5 מספרים הרצאה

הפונקציה atoi ממירה מחרוזת שמכילה מספר שלם לטיפוס int. היא מקבלת מחרוזת (char*) ומחזירה את הערך המספרי שמוצג בה.

char str[] = "123";
int num = atoi(str); // num == 123

אם המחרוזת אינה מייצגת מספר תקין – התוצאה תהיה 0, אך אין דרך לדעת אם זו הייתה באמת המרה של "0" או שגיאה. לכן, atoi נחשבת מסוכנת, ועדיף להשתמש ב־strtol במקרים מתקדמים יותר.


הפונקציה atof ממירה מחרוזת שמייצגת מספר ממשי (float/double) למספר מסוג double.

char str[] = "3.14";
double pi = atof(str); // pi == 3.14

גם כאן, אין טיפול בשגיאות – אם המחרוזת אינה חוקית, יוחזר 0.0.


הפונקציה sprintf כותבת נתונים לתוך מחרוזת במקום להדפיס למסך. זה כמו printf, אבל במקום פלט – המחרוזת מתמלאת.

char buffer[100];
int age = 30;
sprintf(buffer, "הגיל הוא %d", age);
// buffer יכיל את המחרוזת "הגיל הוא 30"

זוהי דרך לבנות מחרוזות דינמיות, שאפשר להשתמש בהן אחר כך או לשמור בקובץ. שים לב – אם המחרוזת לא מספיק גדולה, עלול להתרחש overflow. בגירסאות מודרניות עדיף להשתמש ב־snprintf (שמגביל את האורך).


הפונקציה abs מחזירה את הערך המוחלט של מספר שלם מסוג int. אם המספר חיובי, הוא נשאר כפי שהוא; אם שלילי – מחזיר את ההופכי החיובי שלו.

int x = -5;
int y = abs(x); // y == 5

משמשת למשל כשבודקים מרחק בין שני מספרים בלי תלות בכיוון.


הפונקציה fabs עושה אותו דבר, אך למספרים ממשיים (double). היא מוגדרת בקובץ הכותרת math.h.

double d = -3.5;
double result = fabs(d); // result == 3.5

כמו abs, רק לשבר עשרוני.


הפונקציה pow מחשבת חזקה. היא מקבלת שני ערכים מסוג double: בסיס ומעריך, ומחזירה את התוצאה כ־double.

double result = pow(2, 3); // 2 בחזקת 3 == 8.0

משמשת למציאת חזקה רגילה, שורש (למשל pow(x, 0.5)), או חזקות שליליות. חשוב לזכור שהפעולה איטית יחסית ולכן יש להשתמש בה רק כשבאמת צריך.


הפונקציה sqrt מחזירה את השורש הריבועי של מספר מסוג double. אם מעבירים לה מספר שלילי – התוצאה לא מוגדרת (בהרצה רגילה תקבל NaN או שגיאה).

double result = sqrt(25); // result == 5.0

בדרך כלל משמשת בחישובים גיאומטריים, מרחקים, סטיית תקן ועוד.

לפני השימוש בפונקציות pow, sqrt, fabs וכדומה – יש להוסיף את הקובץ:

#include <math.h>

ולקמפל עם -lm אם אתה משתמש ב־gcc:
כדי להוסיף את ספריית המתמטיקה של libc לקימפול

gcc myfile.c -lm