anchor.diff:      final dynamic argEval = arg.evaluate(type, context);
   
       if (type == EvaluationType.REAL) {
  +      // Compensate for inaccuracies in machine-pi.
  +      // If argEval divides cleanly from pi, return 0.
  +      if ((argEval / math.pi).abs() % 1 == 0) {
  +        return 0;
  +      }
         return math.tan(argEval);
       }
   
  
positive.code:     final dynamic argEval = arg.evaluate(type, context);
  
      if (type == EvaluationType.REAL) {
        return math.sin(argEval);
      }
  
  
negative.code:     final dynamic argEval = arg.evaluate(type, context);
  
      if (type == EvaluationType.REAL) {
        // Compensate for inaccuracies in machine-pi.
        //
        // If argEval divides cleanly from pi (when shifted back to Sin from Cos), return 0.
        if (((argEval - math.pi / 2) / math.pi).abs() % 1 == 0) {
          return 0;
        }
        return math.cos(argEval);
      }
  
  