1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

represent big field elements as negative

This commit is contained in:
schaeff 2019-01-29 12:17:51 +01:00
parent 08c5baf53e
commit bff63a78f6

View file

@ -141,7 +141,12 @@ impl Default for FieldPrime {
impl Display for FieldPrime {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// values up to (p-1)/2 included are represented as positive, values between (p+1)/2 and p-1 as represented as negative by subtracting p
if self.value <= FieldPrime::max_value().value / 2 {
write!(f, "{}", self.value.to_str_radix(10))
} else {
write!(f, "({})", (&self.value - (FieldPrime::max_value().value + BigInt::one())).to_str_radix(10))
}
}
}
@ -612,6 +617,20 @@ mod tests {
let bv = fp.to_dec_string();
assert_eq!(fp, FieldPrime::from_dec_string(bv));
}
#[test]
fn display() {
let one = FieldPrime::from(1);
assert_eq!(String::from("1"), format!("{}", one));
let minus_one = FieldPrime::from(0) - one;
assert_eq!(String::from("(-1)"), format!("{}", minus_one));
// (p-1)/2 -> positive notation
let p_minus_one_over_two = (FieldPrime::from(0) - FieldPrime::from(1)) / FieldPrime::from(2);
assert_eq!(String::from("10944121435919637611123202872628637544274182200208017171849102093287904247808"), format!("{}", p_minus_one_over_two));
// (p-1)/2 + 1 -> negative notation (p-1)/2 + 1 - p == (-p+1)/2
let p_minus_one_over_two_plus_one = ((FieldPrime::from(0) - FieldPrime::from(1)) / FieldPrime::from(2)) + FieldPrime::from(1);
assert_eq!(String::from("(-10944121435919637611123202872628637544274182200208017171849102093287904247808)"), format!("{}", p_minus_one_over_two_plus_one));
}
}
#[test]