Hacker News Digest

28 августа 2025 г. в 17:22 • nshipster.com • ⭐ 416 • 💬 93

OriginalHN

#swift#probabilistic-programming#uncertainty#monte-carlo#gps#interval-arithmetic#fuzzy-logic

Uncertain<T>

Люди слишком уверены в себе. В коде это проявляется так:

if currentLocation.distance(to: target) < 100 {
    print("Вы прибыли!") // А точно ли? 🤨

GPS-координаты приблизительны, но Bool требует выбора. Мы «схлопываем волновую функцию» слишком рано.

В 2014 г. исследователи предложили тип Uncertain<T>, встроенный в систему типов. Я портировал идею на Swift:

import Uncertain

let loc = Uncertain<CLLocation>.from(currentLocation)
let nearby = loc.distance(to: target) < 100
if nearby.probability(exceeds: 0.95) {
    print("Вы прибыли!") // с 95 % уверенности
}

Сравнение возвращает не Bool, а Uncertain<Bool> — вероятность истинности. Под капотом используется распределение Рэлея и метод Монте-Карло; выборка происходит только при необходимости, а SPRT экономит вычисления.

let speed = 400 / Uncertain<Double>.normal(mean: 60, sd: 5)
let ok = speed < 6
print(ok.probability(exceeds: 0.9))

Такой подход делает неопределённость первоклассной и заставляет писать более умный код.