Example #1
0
fraction_t *fraction_sqrt(const fraction_t *x) {
    fraction_integer_t num, den;

    num = x->numerator;
    den = x->denominator;

    if (integer_sqrt(num, &num) && integer_sqrt(den, &den)) {
        return fraction_new(num, den);
    } else {
        return NULL;
    }
}
Example #2
0
rational *
rational_sqrt(rational * data)
{
   integer *tmp;

   rational *ret = rational_copy(data);

   if (integer_realLen(ret->den) < 3)
   {
      integer_lshifta(ret->num, 64L);
      integer_lshifta(ret->den, 64L);
   }

   tmp = integer_sqrt(ret->num);
   ret->num = integer_copy(tmp);
   integer_destroy(tmp);

   tmp = integer_sqrt(ret->den);
   ret->den = integer_copy(tmp);
   integer_destroy(tmp);

   rational_normalize(ret);
   return ret;
}
Example #3
0
void rot_bitmap_set_src_ic(RotBitmapLayer *image, GPoint ic) {
  image->src_ic = ic;

  // adjust the frame so the whole image will still be visible
  const int32_t horiz = MAX(ic.x, abs(image->bitmap->bounds.size.w - ic.x));
  const int32_t vert = MAX(ic.y, abs(image->bitmap->bounds.size.h - ic.y));

  GRect r = layer_get_frame(&image->layer);
  //// const int32_t new_dist = integer_sqrt(horiz*horiz + vert*vert) * 2;
  const int32_t new_dist = (integer_sqrt(horiz*horiz + vert*vert) * 2) + 1; //// Fudge to deal with non-even dimensions--to ensure right-most and bottom-most edges aren't cut off.

  r.size.w = new_dist;
  r.size.h = new_dist;
  layer_set_frame(&image->layer, r);

  r.origin = GPoint(0, 0);
  ////layer_set_bounds(&image->layer, r);
  image->layer.bounds = r;

  image->dest_ic = GPoint(new_dist / 2, new_dist / 2);

  layer_mark_dirty(&(image->layer));
}