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; } }
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; }
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)); }