11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*-
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 2003, Steven G. Kargl
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice unmodified, this list of conditions, and the following
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    disclaimer.
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
28a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes__FBSDID("$FreeBSD$");
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3014538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes#include "math.h"
3114538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes#include "math_private.h"
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfloat
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectroundf(float x)
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	float t;
3714538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes	uint32_t hx;
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3914538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes	GET_FLOAT_WORD(hx, x);
4014538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes	if ((hx & 0x7fffffff) == 0x7f800000)
4114538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes		return (x + x);
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
4314538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes	if (!(hx & 0x80000000)) {
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		t = floorf(x);
4514538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes		if (t - x <= -0.5F)
4614538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes			t += 1;
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		return (t);
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	} else {
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		t = floorf(-x);
5014538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes		if (t + x <= -0.5F)
5114538ca75ef3d0edc8fb86e332d79a4913238cb6Elliott Hughes			t += 1;
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		return (-t);
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	}
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
55