std::sin în C++

Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani, nu în grade.

Sintaxă
double sin(double unghi_radiani);
double cos(double unghi_radiani);
double tan(double unghi_radiani);

Ce face std::sin

std::sin, std::cos și std::tan primesc unghiul în radiani. Un cerc complet are 2π radiani (360°), deci gradele se transformă cu grade * π / 180. Constanta π este std::numbers::pi (C++20).

Rezultatele sunt aproximări: sin(π) nu dă exact 0, ci un număr foarte mic, pentru că nici π nu poate fi reprezentat exact. Afișează cu un număr fix de zecimale.

Parametri

Parametru Descriere
unghi_radiani Unghiul, în radiani.

Ce returnează

Valoarea funcției: sin și cos între -1 și 1; tan orice număr real.

Exemple

Exemplul 1: Unghiuri uzuale, din grade

#include <cmath>
#include <numbers>
#include <print>

int main() {
    for (double grade : {0.0, 30.0, 45.0, 60.0, 90.0}) {
        double rad = grade * std::numbers::pi / 180.0;
        std::println("{:>3}°: sin = {:.4f}, cos = {:.4f}", grade, std::sin(rad), std::cos(rad));
    }
    std::println("tan(45°) = {:.4f}", std::tan(std::numbers::pi / 4));
}

Rezultat

  0°: sin = 0.0000, cos = 1.0000
 30°: sin = 0.5000, cos = 0.8660
 45°: sin = 0.7071, cos = 0.7071
 60°: sin = 0.8660, cos = 0.5000
 90°: sin = 1.0000, cos = 0.0000
tan(45°) = 1.0000

Exemplul 2: sin(π) nu este exact 0

#include <cmath>
#include <numbers>
#include <print>

int main() {
    double s = std::sin(std::numbers::pi);
    std::println("sin(pi) = {:.3e}", s);
    std::println("Cu 6 zecimale: {:.6f}", s);
}

Rezultat

sin(pi) = 1.225e-16
Cu 6 zecimale: 0.000000

Exemplul 3: Înălțimea unei clădiri

Stai la 40 m de clădire și vezi vârful sub un unghi de 35°: înălțimea = distanța · tan(unghi).

#include <cmath>
#include <numbers>
#include <print>

int main() {
    double distanta = 40.0;
    double unghi = 35.0 * std::numbers::pi / 180.0;
    std::println("Înălțimea: {:.1f} m", distanta * std::tan(unghi));
}

Rezultat

Înălțimea: 28.0 m

Greșeli frecvente

  • Dai unghiul în grade: std::sin(90) dă 0.894, nu 1.
  • Compari std::cos(x) == 0: din cauza rotunjirilor, aproape niciodată nu este exact 0. Compară cu o toleranță.

Comenzi înrudite

  • std::asin: Funcțiile trigonometrice inverse: din valoarea sinusului, cosinusului sau tangentei obții unghiul, în radiani.
  • std::atan2: Calculează unghiul punctului (x, y) față de axa orizontală, între -π și π, ținând cont de cadran.
  • std::numbers::pi: Constanta π cu precizia maximă a tipului double, plus alte constante matematice: e, √2, ln 2, φ.
  • std::hypot: Calculează ipotenuza, adică √(x² + y²), fără depășiri la valori mari; din C++17 și în 3 dimensiuni.