protected function updateMessageVariable(Message $message, Variable $variable)
 {
     $oldMarginal = clone $variable->getValue();
     $oldMessage = clone $message->getValue();
     $messageFromVar = GaussianDistribution::divide($oldMarginal, $oldMessage);
     $c = $messageFromVar->getPrecision();
     $d = $messageFromVar->getPrecisionMean();
     $sqrtC = sqrt($c);
     $dOnSqrtC = $d / $sqrtC;
     $epsilsonTimesSqrtC = $this->_epsilon * $sqrtC;
     $d = $messageFromVar->getPrecisionMean();
     $denom = 1.0 - TruncatedGaussianCorrectionFunctions::wExceedsMargin($dOnSqrtC, $epsilsonTimesSqrtC);
     $newPrecision = $c / $denom;
     $newPrecisionMean = ($d + $sqrtC * TruncatedGaussianCorrectionFunctions::vExceedsMargin($dOnSqrtC, $epsilsonTimesSqrtC)) / $denom;
     $newMarginal = GaussianDistribution::fromPrecisionMean($newPrecisionMean, $newPrecision);
     $newMessage = GaussianDistribution::divide(GaussianDistribution::multiply($oldMessage, $newMarginal), $oldMarginal);
     // Update the message and marginal
     $message->setValue($newMessage);
     $variable->setValue($newMarginal);
     // Return the difference in the new marginal
     return GaussianDistribution::subtract($newMarginal, $oldMarginal);
 }