#include "fiko/analiz/tolerans.hpp" #include namespace fiko::analiz { ToleransSonuc toleransZinciri(const std::vector& zincir) { ToleransSonuc s; double ustEk = 0; // worst-case üst yönde toplam katkı double altEk = 0; // worst-case alt yönde toplam katkı double merkezKay = 0; // RSS ortalama kayma (asimetri) double rssKare = 0; // Σ eşdeğer_tol² for (const ToleransKatki& k : zincir) { s.nominal += k.yon * k.nominal; // Worst-case: +yön halkada üst sınır +artiTol, alt sınır −eksiTol katar; // −yön halkada işaret dönünce roller takas olur. if (k.yon >= 0) { ustEk += k.artiTol; altEk += k.eksiTol; } else { ustEk += k.eksiTol; altEk += k.artiTol; } // RSS: simetrik eşdeğer tolerans (yarı-aralık) + yönlü ortalama kayma. const double esdeger = 0.5 * (k.artiTol + k.eksiTol); merkezKay += k.yon * 0.5 * (k.artiTol - k.eksiTol); rssKare += esdeger * esdeger; } s.wcUst = s.nominal + ustEk; s.wcAlt = s.nominal - altEk; s.wcTol = 0.5 * (s.wcUst - s.wcAlt); const double rss = std::sqrt(rssKare); const double merkez = s.nominal + merkezKay; s.rssUst = merkez + rss; s.rssAlt = merkez - rss; s.rssTol = rss; return s; } } // namespace fiko::analiz