ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
6 ноября
1610370 Топик полностью
Anvar (03.11.2026 07:13, просмотров: 118) ответил SciFi на Наверное, ещё есть места, где "надёжно" важнее, чем "быстро". Но таких мест немного в масштабах всемирного погромизма...
ИИ не идет взамен, он идет плюсом. Вы можете разработать сами, потом дать на проверку ИИ, он найдет там кучу косяков, причем не просто ошибки в коде, а проблемы второго , третьего порядка . для примера одно из последних обсуждений с ИИ кода, уже 100- наверное 

1. CalculateExpandedUncertaintyFast — формула variance некорректна по смыслу

csharp

double mean = sum / n;

double variance = (sumSq - n * mean * mean) / (n - 1);

Математически это верно (Σx² − n·mean² = Σ(x−mean)²), но накапливать sumSq в double на больших n — риск потери точности (catastrophic cancellation), если значения большие, а разброс малый. У вас моменты порядка 1e-3…1e-1, sumSq накапливается до n·x² — для n=10000 и x=0.1 это 1e2, а variance может быть 1e-8. Разница двух близких чисел → потеря значащих цифр.

Рекомендация: либо использовать алгоритм Уэлфорда (Welford) для онлайн-среднего и дисперсии, либо (проще) считать variance через sumSq только при разумных n, а для больших — переключиться на Welford. Но у вас график строится до ChartMaxVisiblePoints = 3000 — это уже критичная зона.

2. Дублирование логики между UpdateChartLive и FinalizeStreamFile

UpdateChartLive считает corrected и u инкрементально с промежуточным kAvg (по накопленному среднему), а FinalizeStreamFile — с финальным kAvg. Это значит:

На графике кривая U и corrected-момента не совпадёт с тем, что попадёт в CSV.

Первые точки на графике будут иметь «неправильный» U, который потом «поплывёт» при финализации.

Для live-отображения это приемлемо, но пользователь может удивиться. Стоит либо:

явно писать в лог/подписи, что график — предварительный;

либо на графике показывать только «сырой» момент без corrected/U (то, что не зависит от kAvg).

....


4. GetStudentTCoefficient — эмпирическая формула для n > 100

csharp

if (n > 100)

return 1.96 + 2.4 / n;

Проверим: для n=101 → 1.96 + 0.0238 = 1.9838. Реальное t(0.975, 100) ≈ 1.984. Совпадает хорошо. Для n=1000 → 1.9624, реальное ≈ 1.9623. Тоже хорошо. Формула адекватна, но обратите внимание: при n→∞ она даёт 1.96, а не точное значение из CDF — это осознанное упрощение. Ок.

Однако граница n > 100 создаёт разрыв: при n=100 (CDF) может дать 1.9842, при n=101 (формула) — 1.9838. Небольшой, но скачок. Можно снизить порог до n > 30 или использовать формулу всегда для n > 30.

GY-7