Evaluate `self` at `point` in time `O(log_d)`.
(&self, point: F)
| 221 | |
| 222 | /// Evaluate `self` at `point` in time `O(log_d)`. |
| 223 | pub fn evaluate(&self, point: F) -> F { |
| 224 | let challenges = &self.0; |
| 225 | let log_d = challenges.len(); |
| 226 | |
| 227 | let mut product = F::one(); |
| 228 | for (i, challenge) in challenges.iter().enumerate() { |
| 229 | let i = i + 1; |
| 230 | let elem_degree: u64 = (1 << (log_d - i)) as u64; |
| 231 | let elem = point.pow([elem_degree]); |
| 232 | product *= &(F::one() + &(elem * challenge)); |
| 233 | } |
| 234 | |
| 235 | product |
| 236 | } |
| 237 | } |