double Sample::getPrediction(const Feature &feature) const {
    if (!feature.indexIsCorrect()) {
        throw new MessageException("incorrect feature index");
    }
    std::vector<bool> features;
    features.reserve(FEATURE_NUMBER / 2);
    features.push_back(
            picture.getPixelIntensity(feature.getFirstPixel()) > picture.getPixelIntensity(feature.getSecondPixel()));
    features.push_back(absDifferenceLessThan(picture, feature, 5));
    features.push_back(absDifferenceLessThan(picture, feature, 10));
    features.push_back(absDifferenceLessThan(picture, feature, 25));
    features.push_back(absDifferenceLessThan(picture, feature, 50));
    if (feature.getFeatureIndex() < FEATURE_NUMBER / 2) {
        return features[feature.getFeatureIndex()];
    } else {
        return !features[feature.getFeatureIndex() - FEATURE_NUMBER / 2];
    }
}
bool absDifferenceLessThan(const Picture picture, const Feature &feature, size_t maxDifference) {
    return abs(
            picture.getPixelIntensity(feature.getFirstPixel()) - picture.getPixelIntensity(feature.getSecondPixel())) <
           maxDifference;

}