From d9be22c1b12ab2c50a619fd8440d0175e75eb782 Mon Sep 17 00:00:00 2001 From: Quentin Bourgerie Date: Thu, 23 Sep 2021 11:19:40 +0200 Subject: [PATCH] fix(compiler/runtime): decode with integers --- compiler/lib/Support/KeySet.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/compiler/lib/Support/KeySet.cpp b/compiler/lib/Support/KeySet.cpp index dee58f6f0..375e9db71 100644 --- a/compiler/lib/Support/KeySet.cpp +++ b/compiler/lib/Support/KeySet.cpp @@ -267,11 +267,10 @@ llvm::Error KeySet::decrypt_lwe(size_t argPos, LweCiphertext_u64 *ciphertext, decrypt_lwe_u64(&err, std::get<2>(outputSk), ciphertext, &plaintext), "cannot decrypt"); // Decode - double divisor = std::pow( - 2, 64 - (std::get<0>(outputSk).encryption->encoding.precision + 1)); - output = std::round(((double)plaintext._0) / divisor); - output %= (1 << (std::get<0>(outputSk).encryption->encoding.precision + 1)); - + size_t precision = std::get<0>(outputSk).encryption->encoding.precision; + output = plaintext._0 >> (64 - precision - 2); + size_t carry = output % 2; + output = ((output >> 1) + carry) % (1 << (precision + 1)); return llvm::Error::success(); }