Project

General

Profile

« Previous | Next » 

Revision 14da5302

Added by Xavier Thirioux over 5 years ago

corrected euclidean division in C code

View differences:

src/backends/C/c_backend_common.ml
110 110

  
111 111
let pp_mod pp_val v1 v2 fmt =
112 112
  if !Options.integer_div_euclidean then
113
    (* (a mod_C b) + (a < 0 ? abs(b) : 0) *)
114
    Format.fprintf fmt "((%a %% %a) + (%a < 0?(abs(%a)):0))"
113
    (* (a mod_C b) + (a mod_C b < 0 ? abs(b) : 0) *)
114
    Format.fprintf fmt "((%a %% %a) + ((%a %% %a) < 0?(abs(%a)):0))"
115 115
      pp_val v1 pp_val v2
116 116
      pp_val v1 pp_val v2
117
      pp_val v2
117 118
  else (* Regular behavior: printing a % *)
118 119
    Format.fprintf fmt "(%a %% %a)" pp_val v1 pp_val v2
119 120

  
120 121
let pp_div pp_val v1 v2 fmt =
121 122
  if !Options.integer_div_euclidean then
122
    (* (a - ((a mod_C b) + (a < 0 ? abs(b) : 0))) div_C b *)
123
    Format.fprintf fmt "(%a - ((%a %% %a) + (%a < 0 ? abs(%a) : 0))) / %a"
124
      pp_val v1 pp_val v1 pp_val v2
125
      pp_val v1 pp_val v2 pp_val v2
123
    (* (a - ((a mod_C b) + (a mod_C b < 0 ? abs(b) : 0))) div_C b *)
124
    Format.fprintf fmt "(%a - ((%a %% %a) + ((%a %% %a) < 0 ? abs(%a) : 0))) / %a"
125
      pp_val v1
126
      pp_val v1 pp_val v2
127
      pp_val v1 pp_val v2
128
      pp_val v2
129
      pp_val v2
126 130
  else (* Regular behavior: printing a / *)
127 131
    Format.fprintf fmt "(%a / %a)" pp_val v1 pp_val v2
128 132
  

Also available in: Unified diff