From patchwork Wed May 2 15:43:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 134834 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp835523lji; Wed, 2 May 2018 08:46:15 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpijdfSZYfiq6jez2U3Z/g30s5w6iYs9HhjFFMP/CWQk05q8xxPdhgYwxP0sa/EgI/OTBOo X-Received: by 2002:a1f:214b:: with SMTP id h72-v6mr18731904vkh.176.1525275975827; Wed, 02 May 2018 08:46:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525275975; cv=none; d=google.com; s=arc-20160816; b=YIeRb17eiiEodMtFoOHEXeKbwwYhwOp3NFctfUKkN9G0t2PVFI3a39aSEgQkxDJqKG HyDrsjuY2J3IhqEBgKvdXHyy2tz0I+cuL1jDuTowY2rxd30dk29o3gDmwvGwgBnka5gR 9OhmXNGvctbwLJg9ZrKw+gwUfu5iE/eCzisYYFkL5RAVYP1OkaMHtu77Nq+08uGkaS7E V0Z5ouDUGlGypzW0KwVkM9hkgK7OGzsH1ZAwuveKJ2CvKJOuWXZ69rsLpCZWr8ZiT/21 hI534Pi3zVM6gRnmdz7HMPPt0OqMIiX3uHLXWLN/Be3DyiQJJkBTQIZ6c4WIaARmErBI OYdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=WgT+Wr8Tz0UuWlgnaK7RE3vyeRRoG38WZNTN03T8YSg=; b=grXPc+Mg+g8odIHXRyUua/A3Lyd/IyRIJd5SgZ4lCkTRrhncFimfgIjYJFi4YE09wB CPuIucbcDaUjHiTarH4/4WE1gKfYJORKohQeuaygv1At41Qs900BLjrPRgU7lM7C9Rko RaMDm53IHdFZox7mpJZxgM6d7Y/4SCejv6hD4l7yqyd3YEkNMq8IfOHFCwSir6paIlp3 roPeDkB2QZLydDMQ4og98nm9Xe7J9WG/gVHpLwGWYUrVGqQOnjIIejb88oygKBpkH6cr HhD1PTJQEt4uTzusgr3pcan6U2nYC294zyaXmWbA3ygZ4Yy0uViqBU0Y1f+lYMw8t+r8 YztA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=E7Z5S+Np; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id e58si5908138uaa.158.2018.05.02.08.46.15 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 02 May 2018 08:46:15 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=E7Z5S+Np; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:51149 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDtxP-0006AR-8j for patch@linaro.org; Wed, 02 May 2018 11:46:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDtv5-0004Mz-Aw for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fDtv2-0008MN-Ee for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:51 -0400 Received: from mail-wr0-x242.google.com ([2a00:1450:400c:c0c::242]:44201) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fDtv2-0008Lq-2p for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:48 -0400 Received: by mail-wr0-x242.google.com with SMTP id y15-v6so2808085wrg.11 for ; Wed, 02 May 2018 08:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WgT+Wr8Tz0UuWlgnaK7RE3vyeRRoG38WZNTN03T8YSg=; b=E7Z5S+Np6o//0v0oxnoKp2bFc5WiQ+9+u38BMp+a+qEa64Fl7XbHRib8HvH/C7WvLb 5Erj/UW8esB4dBcZlmwEU1eEfpjSzGF0Tt5E+V3EfhmsIDuyO9tN3HEYBHRTJZKcqpFx N8WAKvil2z8SEBk8PXNfI/fLdmvpjwjNw8kpk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WgT+Wr8Tz0UuWlgnaK7RE3vyeRRoG38WZNTN03T8YSg=; b=fLCfdM1eAi0iDml4xTihHeG+fR3WEMG8ux+Gs5VtIsiiT09du9sHXskbPVev7uXf6W dMYtNpHOTlOd2QIQYmiztjbyE8wMsQqzft+B6LiJNe8W2Gqz1rgB98Outoll8LRE8+hm RL4hro9mDpZ/d2wdhlPEJQdHFWaru8rvHbBRgaGbh7yT0PjQzywmiSrPWNjfshlnm9i7 tqm/fA9koMctLtVOxXnKKlaTjPVySRIEpimt1h9d23nGhkut8oZRY158yeQ1D8p0Su8d diFHXZgBsz896snqlCAsGrBlVVwCMriyMe51UfhsXgDbruV3kqB+KCN1uJb14Dva0IL9 q1DA== X-Gm-Message-State: ALQs6tB0edPwpLMUTpdma2yxSkSQVRvHlqkPLlegKsR7ba+pc6T8+zp9 qJRAlbHk7BFqN4Qc1QeRfAn9oA== X-Received: by 2002:adf:b839:: with SMTP id h54-v6mr15310886wrf.141.1525275826582; Wed, 02 May 2018 08:43:46 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id r14-v6sm18300072wra.41.2018.05.02.08.43.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 02 May 2018 08:43:45 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 4D4953E034C; Wed, 2 May 2018 16:43:44 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Wed, 2 May 2018 16:43:42 +0100 Message-Id: <20180502154344.10585-2-alex.bennee@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180502154344.10585-1-alex.bennee@linaro.org> References: <20180502154344.10585-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::242 Subject: [Qemu-devel] [PATCH v2 1/3] fpu/softfloat: re-factor float to float conversions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-arm@nongnu.org, richard.henderson@linaro.org, qemu-devel@nongnu.org, Aurelien Jarno Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This allows us to delete a lot of additional boilerplate code which is no longer needed. Currently the ieee flag is ignored (everything is assumed to be ieee). Handling for ARM AHP will be in the next patch. Signed-off-by: Alex Bennée --- v2 - pass FloatFmt to float_to_float instead of sizes - split AHP handling to another patch - use rth's suggested re-packing (+ setting .exp) --- fpu/softfloat-specialize.h | 40 ---- fpu/softfloat.c | 443 +++++++------------------------------ include/fpu/softfloat.h | 8 +- 3 files changed, 88 insertions(+), 403 deletions(-) -- 2.17.0 diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h index 27834af0de..a20b440159 100644 --- a/fpu/softfloat-specialize.h +++ b/fpu/softfloat-specialize.h @@ -293,46 +293,6 @@ float16 float16_maybe_silence_nan(float16 a_, float_status *status) return a_; } -/*---------------------------------------------------------------------------- -| Returns the result of converting the half-precision floating-point NaN -| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ - -static commonNaNT float16ToCommonNaN(float16 a, float_status *status) -{ - commonNaNT z; - - if (float16_is_signaling_nan(a, status)) { - float_raise(float_flag_invalid, status); - } - z.sign = float16_val(a) >> 15; - z.low = 0; - z.high = ((uint64_t) float16_val(a)) << 54; - return z; -} - -/*---------------------------------------------------------------------------- -| Returns the result of converting the canonical NaN `a' to the half- -| precision floating-point format. -*----------------------------------------------------------------------------*/ - -static float16 commonNaNToFloat16(commonNaNT a, float_status *status) -{ - uint16_t mantissa = a.high >> 54; - - if (status->default_nan_mode) { - return float16_default_nan(status); - } - - if (mantissa) { - return make_float16(((((uint16_t) a.sign) << 15) - | (0x1F << 10) | mantissa)); - } else { - return float16_default_nan(status); - } -} - #ifdef NO_SIGNALING_NANS int float32_is_quiet_nan(float32 a_, float_status *status) { diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 70e0c40a1c..28b9f4f79b 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1194,6 +1194,90 @@ float64 float64_div(float64 a, float64 b, float_status *status) return float64_round_pack_canonical(pr, status); } +/* + * Float to Float conversions + * + * Returns the result of converting one float format to another. The + * conversion is performed according to the IEC/IEEE Standard for + * Binary Floating-Point Arithmetic. + * + * The float_to_float helper only needs to take care of raising + * invalid exceptions and handling the conversion on NaNs. + */ + +static FloatParts float_to_float(FloatParts a, + const FloatFmt *srcf, const FloatFmt *dstf, + float_status *s) +{ + if (is_nan(a.cls)) { + + if (is_snan(a.cls)) { + s->float_exception_flags |= float_flag_invalid; + } + + if (s->default_nan_mode) { + a.cls = float_class_dnan; + return a; + } + + /* + * Our only option now is to "re-pack" the NaN. As the + * canonilization process doesn't mess with fraction bits for + * NaNs we do it all here. We also reset a.exp to the + * destination format exp_max as the maybe_silence_nan code + * assumes it is correct (which is would be for non-conversions). + */ + a.frac = a.frac << (64 - srcf->frac_size) >> (64 - dstf->frac_size); + a.exp = dstf->exp_max; + a.cls = float_class_msnan; + } + + return a; +} + +float32 float16_to_float32(float16 a, bool ieee, float_status *s) +{ + FloatParts p = float16_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float16_params, &float32_params, s); + return float32_round_pack_canonical(pr, s); +} + +float64 float16_to_float64(float16 a, bool ieee, float_status *s) +{ + FloatParts p = float16_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float16_params, &float64_params, s); + return float64_round_pack_canonical(pr, s); +} + +float16 float32_to_float16(float32 a, bool ieee, float_status *s) +{ + FloatParts p = float32_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float32_params, &float16_params, s); + return float16_round_pack_canonical(pr, s); +} + +float64 float32_to_float64(float32 a, float_status *s) +{ + FloatParts p = float32_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float32_params, &float64_params, s); + return float64_round_pack_canonical(pr, s); +} + +float16 float64_to_float16(float64 a, bool ieee, float_status *s) +{ + FloatParts p = float64_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float64_params, &float16_params, s); + return float16_round_pack_canonical(pr, s); +} + +float32 float64_to_float32(float64 a, float_status *s) +{ + FloatParts p = float64_unpack_canonical(a, s); + FloatParts pr = float_to_float(p, &float64_params, &float32_params, s); + return float32_round_pack_canonical(pr, s); +} + + /* * Rounds the floating-point value `a' to an integer, and returns the * result as a floating-point value. The operation is performed @@ -3142,41 +3226,6 @@ float128 uint64_to_float128(uint64_t a, float_status *status) return normalizeRoundAndPackFloat128(0, 0x406E, a, 0, status); } - - - -/*---------------------------------------------------------------------------- -| Returns the result of converting the single-precision floating-point value -| `a' to the double-precision floating-point format. The conversion is -| performed according to the IEC/IEEE Standard for Binary Floating-Point -| Arithmetic. -*----------------------------------------------------------------------------*/ - -float64 float32_to_float64(float32 a, float_status *status) -{ - flag aSign; - int aExp; - uint32_t aSig; - a = float32_squash_input_denormal(a, status); - - aSig = extractFloat32Frac( a ); - aExp = extractFloat32Exp( a ); - aSign = extractFloat32Sign( a ); - if ( aExp == 0xFF ) { - if (aSig) { - return commonNaNToFloat64(float32ToCommonNaN(a, status), status); - } - return packFloat64( aSign, 0x7FF, 0 ); - } - if ( aExp == 0 ) { - if ( aSig == 0 ) return packFloat64( aSign, 0, 0 ); - normalizeFloat32Subnormal( aSig, &aExp, &aSig ); - --aExp; - } - return packFloat64( aSign, aExp + 0x380, ( (uint64_t) aSig )<<29 ); - -} - /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the extended double-precision floating-point format. The conversion @@ -3695,173 +3744,6 @@ int float32_unordered_quiet(float32 a, float32 b, float_status *status) return 0; } - -/*---------------------------------------------------------------------------- -| Returns the result of converting the double-precision floating-point value -| `a' to the single-precision floating-point format. The conversion is -| performed according to the IEC/IEEE Standard for Binary Floating-Point -| Arithmetic. -*----------------------------------------------------------------------------*/ - -float32 float64_to_float32(float64 a, float_status *status) -{ - flag aSign; - int aExp; - uint64_t aSig; - uint32_t zSig; - a = float64_squash_input_denormal(a, status); - - aSig = extractFloat64Frac( a ); - aExp = extractFloat64Exp( a ); - aSign = extractFloat64Sign( a ); - if ( aExp == 0x7FF ) { - if (aSig) { - return commonNaNToFloat32(float64ToCommonNaN(a, status), status); - } - return packFloat32( aSign, 0xFF, 0 ); - } - shift64RightJamming( aSig, 22, &aSig ); - zSig = aSig; - if ( aExp || zSig ) { - zSig |= 0x40000000; - aExp -= 0x381; - } - return roundAndPackFloat32(aSign, aExp, zSig, status); - -} - - -/*---------------------------------------------------------------------------- -| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a -| half-precision floating-point value, returning the result. After being -| shifted into the proper positions, the three fields are simply added -| together to form the result. This means that any integer portion of `zSig' -| will be added into the exponent. Since a properly normalized significand -| will have an integer portion equal to 1, the `zExp' input should be 1 less -| than the desired result exponent whenever `zSig' is a complete, normalized -| significand. -*----------------------------------------------------------------------------*/ -static float16 packFloat16(flag zSign, int zExp, uint16_t zSig) -{ - return make_float16( - (((uint32_t)zSign) << 15) + (((uint32_t)zExp) << 10) + zSig); -} - -/*---------------------------------------------------------------------------- -| Takes an abstract floating-point value having sign `zSign', exponent `zExp', -| and significand `zSig', and returns the proper half-precision floating- -| point value corresponding to the abstract input. Ordinarily, the abstract -| value is simply rounded and packed into the half-precision format, with -| the inexact exception raised if the abstract input cannot be represented -| exactly. However, if the abstract value is too large, the overflow and -| inexact exceptions are raised and an infinity or maximal finite value is -| returned. If the abstract value is too small, the input value is rounded to -| a subnormal number, and the underflow and inexact exceptions are raised if -| the abstract input cannot be represented exactly as a subnormal half- -| precision floating-point number. -| The `ieee' flag indicates whether to use IEEE standard half precision, or -| ARM-style "alternative representation", which omits the NaN and Inf -| encodings in order to raise the maximum representable exponent by one. -| The input significand `zSig' has its binary point between bits 22 -| and 23, which is 13 bits to the left of the usual location. This shifted -| significand must be normalized or smaller. If `zSig' is not normalized, -| `zExp' must be 0; in that case, the result returned is a subnormal number, -| and it must not require rounding. In the usual case that `zSig' is -| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent. -| Note the slightly odd position of the binary point in zSig compared with the -| other roundAndPackFloat functions. This should probably be fixed if we -| need to implement more float16 routines than just conversion. -| The handling of underflow and overflow follows the IEC/IEEE Standard for -| Binary Floating-Point Arithmetic. -*----------------------------------------------------------------------------*/ - -static float16 roundAndPackFloat16(flag zSign, int zExp, - uint32_t zSig, flag ieee, - float_status *status) -{ - int maxexp = ieee ? 29 : 30; - uint32_t mask; - uint32_t increment; - bool rounding_bumps_exp; - bool is_tiny = false; - - /* Calculate the mask of bits of the mantissa which are not - * representable in half-precision and will be lost. - */ - if (zExp < 1) { - /* Will be denormal in halfprec */ - mask = 0x00ffffff; - if (zExp >= -11) { - mask >>= 11 + zExp; - } - } else { - /* Normal number in halfprec */ - mask = 0x00001fff; - } - - switch (status->float_rounding_mode) { - case float_round_nearest_even: - increment = (mask + 1) >> 1; - if ((zSig & mask) == increment) { - increment = zSig & (increment << 1); - } - break; - case float_round_ties_away: - increment = (mask + 1) >> 1; - break; - case float_round_up: - increment = zSign ? 0 : mask; - break; - case float_round_down: - increment = zSign ? mask : 0; - break; - default: /* round_to_zero */ - increment = 0; - break; - } - - rounding_bumps_exp = (zSig + increment >= 0x01000000); - - if (zExp > maxexp || (zExp == maxexp && rounding_bumps_exp)) { - if (ieee) { - float_raise(float_flag_overflow | float_flag_inexact, status); - return packFloat16(zSign, 0x1f, 0); - } else { - float_raise(float_flag_invalid, status); - return packFloat16(zSign, 0x1f, 0x3ff); - } - } - - if (zExp < 0) { - /* Note that flush-to-zero does not affect half-precision results */ - is_tiny = - (status->float_detect_tininess == float_tininess_before_rounding) - || (zExp < -1) - || (!rounding_bumps_exp); - } - if (zSig & mask) { - float_raise(float_flag_inexact, status); - if (is_tiny) { - float_raise(float_flag_underflow, status); - } - } - - zSig += increment; - if (rounding_bumps_exp) { - zSig >>= 1; - zExp++; - } - - if (zExp < -10) { - return packFloat16(zSign, 0, 0); - } - if (zExp < 0) { - zSig >>= -zExp; - zExp = 0; - } - return packFloat16(zSign, zExp, zSig >> 13); -} - /*---------------------------------------------------------------------------- | If `a' is denormal and we are in flush-to-zero mode then set the | input-denormal exception and return zero. Otherwise just return the value. @@ -3877,163 +3759,6 @@ float16 float16_squash_input_denormal(float16 a, float_status *status) return a; } -static void normalizeFloat16Subnormal(uint32_t aSig, int *zExpPtr, - uint32_t *zSigPtr) -{ - int8_t shiftCount = countLeadingZeros32(aSig) - 21; - *zSigPtr = aSig << shiftCount; - *zExpPtr = 1 - shiftCount; -} - -/* Half precision floats come in two formats: standard IEEE and "ARM" format. - The latter gains extra exponent range by omitting the NaN/Inf encodings. */ - -float32 float16_to_float32(float16 a, flag ieee, float_status *status) -{ - flag aSign; - int aExp; - uint32_t aSig; - - aSign = extractFloat16Sign(a); - aExp = extractFloat16Exp(a); - aSig = extractFloat16Frac(a); - - if (aExp == 0x1f && ieee) { - if (aSig) { - return commonNaNToFloat32(float16ToCommonNaN(a, status), status); - } - return packFloat32(aSign, 0xff, 0); - } - if (aExp == 0) { - if (aSig == 0) { - return packFloat32(aSign, 0, 0); - } - - normalizeFloat16Subnormal(aSig, &aExp, &aSig); - aExp--; - } - return packFloat32( aSign, aExp + 0x70, aSig << 13); -} - -float16 float32_to_float16(float32 a, flag ieee, float_status *status) -{ - flag aSign; - int aExp; - uint32_t aSig; - - a = float32_squash_input_denormal(a, status); - - aSig = extractFloat32Frac( a ); - aExp = extractFloat32Exp( a ); - aSign = extractFloat32Sign( a ); - if ( aExp == 0xFF ) { - if (aSig) { - /* Input is a NaN */ - if (!ieee) { - float_raise(float_flag_invalid, status); - return packFloat16(aSign, 0, 0); - } - return commonNaNToFloat16( - float32ToCommonNaN(a, status), status); - } - /* Infinity */ - if (!ieee) { - float_raise(float_flag_invalid, status); - return packFloat16(aSign, 0x1f, 0x3ff); - } - return packFloat16(aSign, 0x1f, 0); - } - if (aExp == 0 && aSig == 0) { - return packFloat16(aSign, 0, 0); - } - /* Decimal point between bits 22 and 23. Note that we add the 1 bit - * even if the input is denormal; however this is harmless because - * the largest possible single-precision denormal is still smaller - * than the smallest representable half-precision denormal, and so we - * will end up ignoring aSig and returning via the "always return zero" - * codepath. - */ - aSig |= 0x00800000; - aExp -= 0x71; - - return roundAndPackFloat16(aSign, aExp, aSig, ieee, status); -} - -float64 float16_to_float64(float16 a, flag ieee, float_status *status) -{ - flag aSign; - int aExp; - uint32_t aSig; - - aSign = extractFloat16Sign(a); - aExp = extractFloat16Exp(a); - aSig = extractFloat16Frac(a); - - if (aExp == 0x1f && ieee) { - if (aSig) { - return commonNaNToFloat64( - float16ToCommonNaN(a, status), status); - } - return packFloat64(aSign, 0x7ff, 0); - } - if (aExp == 0) { - if (aSig == 0) { - return packFloat64(aSign, 0, 0); - } - - normalizeFloat16Subnormal(aSig, &aExp, &aSig); - aExp--; - } - return packFloat64(aSign, aExp + 0x3f0, ((uint64_t)aSig) << 42); -} - -float16 float64_to_float16(float64 a, flag ieee, float_status *status) -{ - flag aSign; - int aExp; - uint64_t aSig; - uint32_t zSig; - - a = float64_squash_input_denormal(a, status); - - aSig = extractFloat64Frac(a); - aExp = extractFloat64Exp(a); - aSign = extractFloat64Sign(a); - if (aExp == 0x7FF) { - if (aSig) { - /* Input is a NaN */ - if (!ieee) { - float_raise(float_flag_invalid, status); - return packFloat16(aSign, 0, 0); - } - return commonNaNToFloat16( - float64ToCommonNaN(a, status), status); - } - /* Infinity */ - if (!ieee) { - float_raise(float_flag_invalid, status); - return packFloat16(aSign, 0x1f, 0x3ff); - } - return packFloat16(aSign, 0x1f, 0); - } - shift64RightJamming(aSig, 29, &aSig); - zSig = aSig; - if (aExp == 0 && zSig == 0) { - return packFloat16(aSign, 0, 0); - } - /* Decimal point between bits 22 and 23. Note that we add the 1 bit - * even if the input is denormal; however this is harmless because - * the largest possible single-precision denormal is still smaller - * than the smallest representable half-precision denormal, and so we - * will end up ignoring aSig and returning via the "always return zero" - * codepath. - */ - zSig |= 0x00800000; - aExp -= 0x3F1; - - return roundAndPackFloat16(aSign, aExp, zSig, ieee, status); -} - /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the extended double-precision floating-point format. The conversion diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 36626a501b..01ef1c6b81 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -211,10 +211,10 @@ float128 uint64_to_float128(uint64_t, float_status *status); /*---------------------------------------------------------------------------- | Software half-precision conversion routines. *----------------------------------------------------------------------------*/ -float16 float32_to_float16(float32, flag, float_status *status); -float32 float16_to_float32(float16, flag, float_status *status); -float16 float64_to_float16(float64 a, flag ieee, float_status *status); -float64 float16_to_float64(float16 a, flag ieee, float_status *status); +float16 float32_to_float16(float32, bool ieee, float_status *status); +float32 float16_to_float32(float16, bool ieee, float_status *status); +float16 float64_to_float16(float64 a, bool ieee, float_status *status); +float64 float16_to_float64(float16 a, bool ieee, float_status *status); int16_t float16_to_int16(float16, float_status *status); uint16_t float16_to_uint16(float16 a, float_status *status); int16_t float16_to_int16_round_to_zero(float16, float_status *status); From patchwork Wed May 2 15:43:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 134835 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp837566lji; Wed, 2 May 2018 08:48:21 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoiKBtpe4SpEArPe0Xkw1xbkrNZee1jlOR+Y9PdwpO3H9Dtdx5BV8Ffvv221Nm01qAdSrBw X-Received: by 10.176.97.152 with SMTP id h24mr18637143uan.111.1525276101701; Wed, 02 May 2018 08:48:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525276101; cv=none; d=google.com; s=arc-20160816; b=o1m+Gr2UAtxFX5JaFZmXGWrwZSNb4HDFLJsx2KxPoAkgGCyjLihRplDyG5Eofmrs7c eb830CIn1xCIvczLKr8/aB+VODSIhKzwLKzVmwtidYBMwvheYamvjVjXQq/sHvehoXvR 3irYsVmnY5eznvY5uEAp6ZCyWcCBrG6UTxSzSuU72XYuwcErv6m4DLeHu5Vslv3GTZCf jizbuQnlCHZvMcv5kd2JjHpC/vx+3n701mOsKdroEyj55W1gk1+hXQ5s//rInF9vgIoA kb+mkaTBcvtV3WDuCWveAxSY9uxckNYtWSDJmqpPGNjBOm6ozHZaEM/bFNKduhAyAgcU Zjgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=LjSzCye0sGOzbH+gYrksoQIN1nHPDydyMFZw6VL+loA=; b=mpTxEoCAKYXEgOu4IWoSAtcPg++jHOmyx6WSyT8Ms+7ubQwxHCU2okMhrSwdhWsOeg w8Y5YUn25us2YvkXZFGU92F5B2kvdrYCKDCAm1yOo77n8WxwpLeRbemQIhHH1pNAxn3K Ggr6IwLguxKF5Lw8e7xLsPga8OwPwpPg0PyVldfeKRFwpbsJ1vZSup69BefbKEuf4hos MzSg4nkYtS1luRPoDMmBcWWIvBJt1aaqxllU5pIJBnEeTpkEkcRj5eQk4DKTGvEdkqNt WrF2ZLDHbtHykjcjZ/lmJGGBlS7oKSavTpzMKvKtQcKxVgaTJGxnEWVaa549zFqoa/5G 6h4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=bdPTbaiv; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id h18-v6si5606622vkh.74.2018.05.02.08.48.21 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 02 May 2018 08:48:21 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=bdPTbaiv; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:51165 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDtzR-0007nN-3v for patch@linaro.org; Wed, 02 May 2018 11:48:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46858) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDtv5-0004NU-WA for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fDtv4-0008NP-Kz for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:52 -0400 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:44203) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fDtv4-0008N1-Bs for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:50 -0400 Received: by mail-wr0-x244.google.com with SMTP id y15-v6so2808199wrg.11 for ; Wed, 02 May 2018 08:43:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LjSzCye0sGOzbH+gYrksoQIN1nHPDydyMFZw6VL+loA=; b=bdPTbaiveoAsCpixwmGWncO6HECfNJdWtHUW7xMISFvZhP3h7EDt5ba8sSU9vNkX4u aWYhaRjz5EpmspNpzGB5QwCppxb3Vzslyq/QsERUF2swagftSctJRkFJstY2egdZUVxp K6aaKWnvMQocn+SegF+EtPJJozS16rXPePuks= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LjSzCye0sGOzbH+gYrksoQIN1nHPDydyMFZw6VL+loA=; b=qyCi6PPCgudWhp3an8ORKj3LlptIlzxOl+962RZ7mOdmUNyoOnHDbBGhbxtcQQZOwQ dQn+moZemeTmgNeP0BkmUGiQDGH+NQL+rc6vwIpdVUsgHJdILwA9Tstm4L6aoXGDH2iA CfP6cEI9MnBQ0zx+BVX50PzBNtuySbiiGZHkrYsUA1IXa2bMq+bZxvlj++5/TCWRt9tC p3OwgyMh56coAdAnnp/dyeXZCYQxtwKwf4Br0G2T9GuhVcEKH6ODjW5Yl2gD9Lvhbrga FwaXv6TZYXeULoEEf83h1MMOMEUGbsNLxLBTbWQmt9CeoAytPEB4CnqZWmAS9JZ8oCA1 x0QA== X-Gm-Message-State: ALQs6tDJd855PKeo3F/2fQeN6vjXWCnTnZhuTTSO6/6lJEiHftYiKI9E oKKkiGr5A/FLaWDExhbGRWrVDw== X-Received: by 2002:adf:de0c:: with SMTP id b12-v6mr14910303wrm.131.1525275829217; Wed, 02 May 2018 08:43:49 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id k126sm15662933wmg.6.2018.05.02.08.43.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 02 May 2018 08:43:45 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 5FD593E049F; Wed, 2 May 2018 16:43:44 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Wed, 2 May 2018 16:43:43 +0100 Message-Id: <20180502154344.10585-3-alex.bennee@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180502154344.10585-1-alex.bennee@linaro.org> References: <20180502154344.10585-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::244 Subject: [Qemu-devel] [PATCH v2 2/3] fpu/softfloat: support ARM Alternative half-precision X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-arm@nongnu.org, richard.henderson@linaro.org, qemu-devel@nongnu.org, Aurelien Jarno Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" For float16 ARM supports an alternative half-precision format which sacrifices the ability to represent NaN/Inf in return for a higher dynamic range. To support this I've added an additional FloatFmt (float16_params_ahp). The new FloatFmt flag (arm_althp) is then used to modify the behaviour of canonicalize and round_canonical with respect to representation and exception raising. Finally the float16_to_floatN and floatN_to_float16 conversion routines select the new alternative FloatFmt when !ieee. Signed-off-by: Alex Bennée --- fpu/softfloat.c | 97 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 23 deletions(-) -- 2.17.0 diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 28b9f4f79b..25a331158f 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -234,6 +234,8 @@ typedef struct { * frac_lsb: least significant bit of fraction * fram_lsbm1: the bit bellow the least significant bit (for rounding) * round_mask/roundeven_mask: masks used for rounding + * The following optional modifiers are available: + * arm_althp: handle ARM Alternative Half Precision */ typedef struct { int exp_size; @@ -245,6 +247,7 @@ typedef struct { uint64_t frac_lsbm1; uint64_t round_mask; uint64_t roundeven_mask; + bool arm_althp; } FloatFmt; /* Expand fields based on the size of exponent and fraction */ @@ -257,12 +260,17 @@ typedef struct { .frac_lsb = 1ull << (DECOMPOSED_BINARY_POINT - F), \ .frac_lsbm1 = 1ull << ((DECOMPOSED_BINARY_POINT - F) - 1), \ .round_mask = (1ull << (DECOMPOSED_BINARY_POINT - F)) - 1, \ - .roundeven_mask = (2ull << (DECOMPOSED_BINARY_POINT - F)) - 1 + .roundeven_mask = (2ull << (DECOMPOSED_BINARY_POINT - F)) - 1, static const FloatFmt float16_params = { FLOAT_PARAMS(5, 10) }; +static const FloatFmt float16_params_ahp = { + FLOAT_PARAMS(5, 10) + .arm_althp = true +}; + static const FloatFmt float32_params = { FLOAT_PARAMS(8, 23) }; @@ -326,7 +334,7 @@ static inline float64 float64_pack_raw(FloatParts p) static FloatParts canonicalize(FloatParts part, const FloatFmt *parm, float_status *status) { - if (part.exp == parm->exp_max) { + if (part.exp == parm->exp_max && !parm->arm_althp) { if (part.frac == 0) { part.cls = float_class_inf; } else { @@ -412,8 +420,9 @@ static FloatParts round_canonical(FloatParts p, float_status *s, exp += parm->exp_bias; if (likely(exp > 0)) { + bool maybe_inexact = false; if (frac & round_mask) { - flags |= float_flag_inexact; + maybe_inexact = true; frac += inc; if (frac & DECOMPOSED_OVERFLOW_BIT) { frac >>= 1; @@ -422,14 +431,26 @@ static FloatParts round_canonical(FloatParts p, float_status *s, } frac >>= frac_shift; - if (unlikely(exp >= exp_max)) { - flags |= float_flag_overflow | float_flag_inexact; - if (overflow_norm) { - exp = exp_max - 1; - frac = -1; - } else { - p.cls = float_class_inf; - goto do_inf; + if (parm->arm_althp) { + if (unlikely(exp >= exp_max + 1)) { + flags |= float_flag_invalid; + frac = -1; + exp = exp_max; + } else if (maybe_inexact) { + flags |= float_flag_inexact; + } + } else { + if (unlikely(exp >= exp_max)) { + flags |= float_flag_overflow | float_flag_inexact; + if (overflow_norm) { + exp = exp_max - 1; + frac = -1; + } else { + p.cls = float_class_inf; + goto do_inf; + } + } else if (maybe_inexact) { + flags |= float_flag_inexact; } } } else if (s->flush_to_zero) { @@ -474,7 +495,13 @@ static FloatParts round_canonical(FloatParts p, float_status *s, case float_class_inf: do_inf: exp = exp_max; - frac = 0; + if (parm->arm_althp) { + flags |= float_flag_invalid; + /* Alt HP returns result = sign:Ones(M-1) */ + frac = -1; + } else { + frac = 0; + } break; case float_class_qnan: @@ -492,12 +519,21 @@ static FloatParts round_canonical(FloatParts p, float_status *s, return p; } +/* Explicit FloatFmt version */ +static FloatParts float16a_unpack_canonical(const FloatFmt *params, + float16 f, float_status *s) +{ + return canonicalize(float16_unpack_raw(f), params, s); +} + static FloatParts float16_unpack_canonical(float16 f, float_status *s) { - return canonicalize(float16_unpack_raw(f), &float16_params, s); + return float16a_unpack_canonical(&float16_params, f, s); } -static float16 float16_round_pack_canonical(FloatParts p, float_status *s) + +static float16 float16a_round_pack_canonical(const FloatFmt *params, + FloatParts p, float_status *s) { switch (p.cls) { case float_class_dnan: @@ -505,11 +541,16 @@ static float16 float16_round_pack_canonical(FloatParts p, float_status *s) case float_class_msnan: return float16_maybe_silence_nan(float16_pack_raw(p), s); default: - p = round_canonical(p, s, &float16_params); + p = round_canonical(p, s, params); return float16_pack_raw(p); } } +static float16 float16_round_pack_canonical(FloatParts p, float_status *s) +{ + return float16a_round_pack_canonical(&float16_params, p, s); +} + static FloatParts float32_unpack_canonical(float32 f, float_status *s) { return canonicalize(float32_unpack_raw(f), &float32_params, s); @@ -1235,25 +1276,34 @@ static FloatParts float_to_float(FloatParts a, return a; } +/* + * Currently non-ieee implies ARM Alternative Half Precision handling + * for float16 values. If more are needed we'll need to expand the API + * into softfloat. + */ + float32 float16_to_float32(float16 a, bool ieee, float_status *s) { - FloatParts p = float16_unpack_canonical(a, s); - FloatParts pr = float_to_float(p, &float16_params, &float32_params, s); + const FloatFmt *fmt16 = ieee ? &float16_params : &float16_params_ahp; + FloatParts p = float16a_unpack_canonical(fmt16, a, s); + FloatParts pr = float_to_float(p, fmt16, &float32_params, s); return float32_round_pack_canonical(pr, s); } float64 float16_to_float64(float16 a, bool ieee, float_status *s) { - FloatParts p = float16_unpack_canonical(a, s); - FloatParts pr = float_to_float(p, &float16_params, &float64_params, s); + const FloatFmt *fmt16 = ieee ? &float16_params : &float16_params_ahp; + FloatParts p = float16a_unpack_canonical(fmt16, a, s); + FloatParts pr = float_to_float(p, fmt16, &float64_params, s); return float64_round_pack_canonical(pr, s); } float16 float32_to_float16(float32 a, bool ieee, float_status *s) { + const FloatFmt *fmt16 = ieee ? &float16_params : &float16_params_ahp; FloatParts p = float32_unpack_canonical(a, s); - FloatParts pr = float_to_float(p, &float32_params, &float16_params, s); - return float16_round_pack_canonical(pr, s); + FloatParts pr = float_to_float(p, &float32_params, fmt16, s); + return float16a_round_pack_canonical(fmt16, pr, s); } float64 float32_to_float64(float32 a, float_status *s) @@ -1265,9 +1315,10 @@ float64 float32_to_float64(float32 a, float_status *s) float16 float64_to_float16(float64 a, bool ieee, float_status *s) { + const FloatFmt *fmt16 = ieee ? &float16_params : &float16_params_ahp; FloatParts p = float64_unpack_canonical(a, s); - FloatParts pr = float_to_float(p, &float64_params, &float16_params, s); - return float16_round_pack_canonical(pr, s); + FloatParts pr = float_to_float(p, &float64_params, fmt16, s); + return float16a_round_pack_canonical(fmt16, pr, s); } float32 float64_to_float32(float64 a, float_status *s) From patchwork Wed May 2 15:43:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 134836 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp838842lji; Wed, 2 May 2018 08:49:41 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoSygbTMpI4ZZdjkrpv9/TeEZ5f/OVQ0oVRB6gkJ3uz3hm2bAcT9uDrX2gPrqydJ130HsOt X-Received: by 2002:a81:eb01:: with SMTP id n1-v6mr11397909ywm.102.1525276181505; Wed, 02 May 2018 08:49:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525276181; cv=none; d=google.com; s=arc-20160816; b=iqCtdBBxJzJqBqElVTOS0VnOuAKdHubJq3DKMkLJYCLkkfwNdXscUOf5oH9bQAgGkF qNHTkAK9ckrqDGLOrxVE8fTxCpwmQFt8gc+EA/gD3+1FiGNfRxaAjXJ+YDt0MQ1CucaC 7t8A1DKE8f0BM4mONOzo+x6e6UFOC14/pFucpaEibrcVaJ0UxWCIyHpvhQGCHH4o61pM u41pRO4O/BfwgbaG5A8wYvzzS3v87vnvTFTRGXjUICBu3yMlcPTFNeLj/oEFOQFmOkSf 3Ky586eDoy0lcgDakAfrdH631lQmpbo4VjeHPJnF+mTNIyiIb91RprJwHxUIJbYAhl9V aAnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=ibVwonmpNN9fZY9gawTwgeMrluE1oSoVTM/RolFRwbc=; b=NZJH0Uu0Fq0TuBG25uK6UXMzW4Bl4ShXj8TKZ7/sTHeZk1Y4Ynu/GozasVvxT5HXT/ tB7edPbfo+IbyCYdd6lZzoh3ixiZz0ODuUqxKEYj0lZeNTttvwFPfotIyVGtELixADZk Dtuq0yixwRWrDOGQOPDlp6sSXKz1/+KFvStJtE3Sm4hp/VOrjny7Jga6orrrvRQwAxSc NpnymxB2QGe8nCTSwbGx+REcvtgFc89nSdYlWS9STV9e7Op4USaBwSW8vQttHFjFaN5T N16JLnaltl/+rjEpo97y9arZRHNO1qHyASIOzZ4tm8B8bYxzzlWSu8zDiI8BLQrQsUXO 0qmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=R3njHZKW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id e4-v6si5431001vkg.282.2018.05.02.08.49.41 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 02 May 2018 08:49:41 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=R3njHZKW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:51171 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDu0i-0008R5-Mq for patch@linaro.org; Wed, 02 May 2018 11:49:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46961) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDtvO-0004eS-Oy for qemu-devel@nongnu.org; Wed, 02 May 2018 11:44:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fDtvD-0008SD-4K for qemu-devel@nongnu.org; Wed, 02 May 2018 11:44:10 -0400 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:33212) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fDtvC-0008R8-Gd for qemu-devel@nongnu.org; Wed, 02 May 2018 11:43:59 -0400 Received: by mail-wr0-x243.google.com with SMTP id o4-v6so14529864wrm.0 for ; Wed, 02 May 2018 08:43:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ibVwonmpNN9fZY9gawTwgeMrluE1oSoVTM/RolFRwbc=; b=R3njHZKWP+E9Prk6xAOKkQyaFFNV2zfnoFXW4oHNPR8MSpcU7dVakod+MhT8vvuLTp 93LSvqV9O88oqhWPRydeMY5/mu9ue87fMr9aa3qkygL3CF3Fnap1XrcShCMcPU+npHII Rganby9ztqeqoQKu7sJPZfsVP3SziIXNKQoIk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ibVwonmpNN9fZY9gawTwgeMrluE1oSoVTM/RolFRwbc=; b=GSw15EIbqDi8sgkA41EMjP95oxoSUt+zsN6g+XKY6FYlai2r+xOcg3ADYo3OE8J07g U1cWNfAPvrD+3SjsueEz+Xts78BUrsSK46rlIuUZNExqg3PXk20pyOJgH9YhMA0Kpq/w fWmoRoB1K079XRN7dNiYEM5pp5W+E0XiRM0AKAHj14z8fsvsECIVVb1Aw6DzHMp9jKAL 0BMBAzlHdFCaGDMHh/fjgLmByA0X5QD3bnodHEOUkjBYx5n7hgFW2pMSDQWjGBMqUbhq 1cB8jfux2tR7dz+6hTEMykD1e34o5JEewfRRiklMpwn6e5kyxc/XyfgMLhSrV3M1ndzO M82Q== X-Gm-Message-State: ALQs6tA3d/OctnASPRmaEWv+CKytLB+fSGQWf9SPMnoq5ZkyFJ6iClZC KQqcYJEWRoPSIFgLxlxcicz3Ng== X-Received: by 2002:adf:a3c7:: with SMTP id m7-v6mr14333473wrb.208.1525275835090; Wed, 02 May 2018 08:43:55 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id q34-v6sm18039063wrb.27.2018.05.02.08.43.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 02 May 2018 08:43:45 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 793AA3E04CD; Wed, 2 May 2018 16:43:44 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Wed, 2 May 2018 16:43:44 +0100 Message-Id: <20180502154344.10585-4-alex.bennee@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180502154344.10585-1-alex.bennee@linaro.org> References: <20180502154344.10585-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::243 Subject: [Qemu-devel] [PATCH v2 3/3] tests/tcg/aarch64: add fcvt test cases for AArch64 (!UPSTREAM) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-arm@nongnu.org, richard.henderson@linaro.org, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This runs through the usual float to float conversions and crucially also runs with ARM Alternative Half Precision Format. [!UPSTREAM: will be in next revision of tcg-tests-revival] Signed-off-by: Alex Bennée --- v4 - add fcvt.ref and check results against it - fix single_to_half, single_to_double conversions - properly toggle AHP mode (fpsr->fpcr) - more values around the AHP margins --- tests/tcg/aarch64/fcvt.c | 296 +++++ tests/tcg/aarch64/fcvt.ref | 2138 ++++++++++++++++++++++++++++++++++++ 2 files changed, 2434 insertions(+) create mode 100644 tests/tcg/aarch64/fcvt.c create mode 100644 tests/tcg/aarch64/fcvt.ref -- 2.17.0 diff --git a/tests/tcg/aarch64/fcvt.c b/tests/tcg/aarch64/fcvt.c new file mode 100644 index 0000000000..8f720dfa9f --- /dev/null +++ b/tests/tcg/aarch64/fcvt.c @@ -0,0 +1,296 @@ +/* + * Test Floating Point Conversion + */ + +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +static char flag_str[256]; + +static char *get_flag_state(int flags) +{ + if (flags) { + snprintf(flag_str, sizeof(flag_str), "%s %s %s %s %s", + flags & FE_OVERFLOW ? "OVERFLOW" : "", + flags & FE_UNDERFLOW ? "UNDERFLOW" : "", + flags & FE_DIVBYZERO ? "DIV0" : "", + flags & FE_INEXACT ? "INEXACT" : "", + flags & FE_INVALID ? "INVALID" : ""); + } else { + snprintf(flag_str, sizeof(flag_str), "OK"); + } + + return flag_str; +} + +static void print_double_number(int i, double num) +{ + uint64_t double_as_hex = *(uint64_t *) # + int flags = fetestexcept(FE_ALL_EXCEPT); + char *fstr = get_flag_state(flags); + + printf("%02d DOUBLE: %02.20e / %#020lx (%#x => %s)\n", + i, num, double_as_hex, flags, fstr); +} + +static void print_single_number(int i, float num) +{ + uint32_t single_as_hex = *(uint32_t *) # + int flags = fetestexcept(FE_ALL_EXCEPT); + char *fstr = get_flag_state(flags); + + printf("%02d SINGLE: %02.20e / %#010x (%#x => %s)\n", + i, num, single_as_hex, flags, fstr); +} + +static void print_half_number(int i, uint16_t num) +{ + int flags = fetestexcept(FE_ALL_EXCEPT); + char *fstr = get_flag_state(flags); + + printf("%02d HALF: %#04x (%#x => %s)\n", + i, num, flags, fstr); +} + +float single_numbers[] = { -FLT_MAX, + -1.111E+31, + -1.111E+30, + -1.08700982e-12, + -1.78051176e-20, + -FLT_MIN, + 0.0, + FLT_MIN, + 5.96046E-8, /* min positive FP16 subnormal */ + 6.09756E-5, /* max subnormal FP16 */ + 6.10352E-5, /* min positive normal FP16 */ + 1.0, + 1.0009765625, /* smallest float after 1.0 FP16 */ + 2.0, + M_E, M_PI, + 65503.0, + 65504.0, /* max FP16 */ + 65505.0, + 131007.0, + 131008.0, /* max AFP */ + 131009.0, + 1.111E+30, + FLT_MAX }; + +static void convert_single_to_half(void) +{ + int i; + + printf("Converting single-precision to half-precision\n"); + + for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) { + float input = single_numbers[i]; + uint16_t output; + + feclearexcept(FE_ALL_EXCEPT); + + print_single_number(i, input); + asm("fcvt %h0, %s1" : "=w" (output) : "x" (input)); + print_half_number(i, output); + } +} + +static void convert_single_to_double(void) +{ + int i; + + printf("Converting single-precision to double-precision\n"); + + for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) { + float input = single_numbers[i]; + uint64_t output; + + feclearexcept(FE_ALL_EXCEPT); + + print_single_number(i, input); + asm("fcvt %d0, %s1" : "=w" (output) : "x" (input)); + print_double_number(i, output); + } +} + +double double_numbers[] = { -DBL_MAX, + -FLT_MAX-1.0, + -FLT_MAX, + -1.111E+31, + -1.111E+30, /* half prec */ + -2.0, -1.0, + -DBL_MIN, + -FLT_MIN, + 0.0, + FLT_MIN, + 5.96046E-8, /* min positive FP16 subnormal */ + 6.09756E-5, /* max subnormal FP16 */ + 6.10352E-5, /* min positive normal FP16 */ + 1.0, + 1.0009765625, /* smallest float after 1.0 FP16 */ + DBL_MIN, + 1.3789972848607228e-308, + 1.4914738736681624e-308, + 1.0, 2.0, + M_E, M_PI, + 65503.0, + 65504.0, /* max FP16 */ + 65505.0, + 131007.0, + 131008.0, /* max AFP */ + 131009.0, + FLT_MAX, + FLT_MAX + 1.0, + DBL_MAX }; + +static void convert_double_to_half(void) +{ + int i; + + printf("Converting double-precision to half-precision\n"); + + for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) { + double input = double_numbers[i]; + uint16_t output; + + feclearexcept(FE_ALL_EXCEPT); + + print_double_number(i, input); + + /* as we don't have _Float16 support */ + asm("fcvt %h0, %d1" : "=w" (output) : "x" (input)); + print_half_number(i, output); + } +} + +static void convert_double_to_single(void) +{ + int i; + + printf("Converting double-precision to single-precision\n"); + + for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) { + double input = double_numbers[i]; + uint32_t output; + + feclearexcept(FE_ALL_EXCEPT); + + print_double_number(i, input); + + asm("fcvt %s0, %d1" : "=w" (output) : "x" (input)); + + print_single_number(i, output); + } +} + +/* no handy defines for these numbers */ +uint16_t half_numbers[] = { + 0xffff, /* -NaN / AHP -Max */ + 0xfcff, /* -NaN / AHP */ + 0xfc01, /* -NaN / AHP */ + 0xfc00, /* -Inf */ + 0xfbff, /* -Max */ + 0xc000, /* -2 */ + 0xbc00, /* -1 */ + 0x8001, /* -MIN subnormal */ + 0x8000, /* -0 */ + 0x0000, /* +0 */ + 0x0001, /* MIN subnormal */ + 0x3c00, /* 1 */ + 0x7bff, /* Max */ + 0x7c00, /* Inf */ + 0x7c01, /* NaN / AHP */ + 0x7cff, /* NaN / AHP */ + 0x7fff, /* NaN / AHP +Max*/ +}; + +static void convert_half_to_double(void) +{ + int i; + + printf("Converting half-precision to double-precision\n"); + + for (i = 0; i < ARRAY_SIZE(half_numbers); ++i) { + uint16_t input = half_numbers[i]; + double output; + + feclearexcept(FE_ALL_EXCEPT); + + print_half_number(i, input); + asm("fcvt %d0, %h1" : "=w" (output) : "x" (input)); + print_double_number(i, output); + } +} + +static void convert_half_to_single(void) +{ + int i; + + printf("Converting half-precision to single-precision\n"); + + for (i = 0; i < ARRAY_SIZE(half_numbers); ++i) { + uint16_t input = half_numbers[i]; + float output; + + feclearexcept(FE_ALL_EXCEPT); + + print_half_number(i, input); + asm("fcvt %s0, %h1" : "=w" (output) : "x" (input)); + print_single_number(i, output); + } +} + +typedef struct { + int flag; + char *desc; +} float_mapping; + +float_mapping round_flags[] = { + { FE_TONEAREST, "to nearest" }, + { FE_UPWARD, "upwards" }, + { FE_DOWNWARD, "downwards" }, + { FE_TOWARDZERO, "to zero" } +}; + +int main(int argc, char *argv[argc]) +{ + int i; + + printf("#### Enabling IEEE Half Precision\n"); + + for (i = 0; i < ARRAY_SIZE(round_flags); ++i) { + fesetround(round_flags[i].flag); + printf("### Rounding %s\n", round_flags[i].desc); + convert_single_to_half(); + convert_single_to_double(); + convert_double_to_half(); + convert_double_to_single(); + convert_half_to_single(); + convert_half_to_double(); + } + + /* And now with ARM alternative FP16 */ + asm("mrs x1, fpcr\n\t" + "orr x1, x1, %[flags]\n\t" + "msr fpcr, x1\n\t" + : /* no output */ : [flags] "n" (1 << 26) : "x1" ); + + printf("#### Enabling ARM Alternative Half Precision\n"); + + for (i = 0; i < ARRAY_SIZE(round_flags); ++i) { + fesetround(round_flags[i].flag); + printf("### Rounding %s\n", round_flags[i].desc); + convert_single_to_half(); + convert_single_to_double(); + convert_double_to_half(); + convert_double_to_single(); + convert_half_to_single(); + convert_half_to_double(); + } + + return 0; +} diff --git a/tests/tcg/aarch64/fcvt.ref b/tests/tcg/aarch64/fcvt.ref new file mode 100644 index 0000000000..5a5316814c --- /dev/null +++ b/tests/tcg/aarch64/fcvt.ref @@ -0,0 +1,2138 @@ +#### Enabling IEEE Half Precision +### Rounding to nearest +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x4170 (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bff (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x4170 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bff (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000 (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07853004800000000000e+09 / 0x4e809220 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -nan / 0xffffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -nan / 0xffdfe000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -nan / 0xffc02000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -inf / 0xff800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: inf / 0x7f800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: nan / 0x7fc02000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: nan / 0x7fdfe000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: nan / 0x7fffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: nan / 0x007ff8040000000000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK) +### Rounding upwards +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x400 (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 HALF: 0x401 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x4170 (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4249 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bff (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7c00 (0x14 => OVERFLOW INEXACT ) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x400 (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x401 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x4170 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4249 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bff (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000 (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912768000000000000e+08 / 0x4e620001 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07853004800000000000e+09 / 0x4e809220 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -nan / 0xffffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -nan / 0xffdfe000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -nan / 0xffc02000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -inf / 0xff800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: inf / 0x7f800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: nan / 0x7fc02000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: nan / 0x7fdfe000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: nan / 0x7fffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: nan / 0x007ff8040000000000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK) +### Rounding downwards +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x416f (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bfe (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +03 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xfc00 (0x14 => OVERFLOW INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x416f (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bfe (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -nan / 0xffffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -nan / 0xffdfe000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -nan / 0xffc02000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -inf / 0xff800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: inf / 0x7f800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: nan / 0x7fc02000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: nan / 0x7fdfe000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: nan / 0x7fffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: nan / 0x007ff8040000000000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK) +### Rounding to zero +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x416f (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bfe (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7bff (0x14 => OVERFLOW INEXACT ) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xfbff (0x14 => OVERFLOW INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x416f (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bfe (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -nan / 0xffffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -nan / 0xffdfe000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -nan / 0xffc02000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -inf / 0xff800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: inf / 0x7f800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: nan / 0x7fc02000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: nan / 0x7fdfe000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: nan / 0x7fffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 => INVALID) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 => INVALID) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: nan / 0x007ff8040000000000 (0x1 => INVALID) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 => INVALID) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK) +#### Enabling ARM Alternative Half Precision +### Rounding to nearest +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x4170 (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bff (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7fff (0x10 => INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7fff (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7fff (0x10 => INEXACT ) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7fff (0x1 => INVALID) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7fff (0x1 => INVALID) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xffff (0x1 => INVALID) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xffff (0x1 => INVALID) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x4170 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bff (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000 (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07853004800000000000e+09 / 0x4e809220 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: 6.55360000000000000000e+04 / 0x47800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: 6.56000000000000000000e+04 / 0x47802000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK) +### Rounding upwards +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x400 (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 HALF: 0x401 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x4170 (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4249 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bff (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7c00 (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7fff (0x10 => INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7fff (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7fff (0x1 => INVALID) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7fff (0x1 => INVALID) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7fff (0x1 => INVALID) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750797e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851006e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xffff (0x1 => INVALID) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xffff (0x1 => INVALID) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x400 (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x401 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0x01 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x4170 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4249 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bff (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000 (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912768000000000000e+08 / 0x4e620001 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07853004800000000000e+09 / 0x4e809220 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: 6.55360000000000000000e+04 / 0x47800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: 6.56000000000000000000e+04 / 0x47802000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK) +### Rounding downwards +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x416f (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bfe (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7ffe (0x10 => INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7fff (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7fff (0x10 => INEXACT ) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7fff (0x1 => INVALID) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7fff (0x1 => INVALID) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750797e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xffff (0x1 => INVALID) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xffff (0x1 => INVALID) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8001 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x416f (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bfe (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000 (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: 6.55360000000000000000e+04 / 0x47800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: 6.56000000000000000000e+04 / 0x47802000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK) +### Rounding to zero +Converting single-precision to half-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 HALF: 0000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 HALF: 0x400 (0x10 => INEXACT ) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 HALF: 0x3c01 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 HALF: 0x4000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 HALF: 0x416f (0x10 => INEXACT ) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 HALF: 0x4248 (0x10 => INEXACT ) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 HALF: 0x7bfe (0x10 => INEXACT ) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 HALF: 0x7bff (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 HALF: 0x7bff (0x10 => INEXACT ) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 HALF: 0x7ffe (0x10 => INEXACT ) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 HALF: 0x7fff (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 HALF: 0x7fff (0x10 => INEXACT ) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 HALF: 0x7fff (0x1 => INVALID) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 HALF: 0x7fff (0x1 => INVALID) +Converting single-precision to double-precision +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff (0 => OK) +00 DOUBLE: 1.44070152074213457920e+19 / 0x0043e8fdfffffc0000 (0 => OK) +01 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59 (0 => OK) +01 DOUBLE: 1.42948554489798328320e+19 / 0x0043e8cc30e9640000 (0 => OK) +02 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b (0 => OK) +02 DOUBLE: 1.42798013491629260800e+19 / 0x0043e8c581756c0000 (0 => OK) +03 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8 (0 => OK) +03 DOUBLE: 1.36512894828617400320e+19 / 0x0043e7ae63eea00000 (0 => OK) +04 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22 (0 => OK) +04 DOUBLE: 1.35347300458215505920e+19 / 0x0043e77aa0a8880000 (0 => OK) +05 SINGLE: -1.17549435082228750796e-38 / 0x80800000 (0 => OK) +05 DOUBLE: 1.32631009026061107200e+19 / 0x0043e7020000000000 (0 => OK) +06 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +07 SINGLE: 1.17549435082228750796e-38 / 0x00800000 (0 => OK) +07 DOUBLE: 4.03972886575133491200e+18 / 0x0043cc080000000000 (0 => OK) +08 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3 (0 => OK) +08 DOUBLE: 4.49909602076380364800e+18 / 0x0043cf37ffff300000 (0 => OK) +09 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d (0 => OK) +09 DOUBLE: 4.54412323490313011200e+18 / 0x0043cf87fc00d00000 (0 => OK) +10 SINGLE: 6.10351999057456851005e-05 / 0x38800006 (0 => OK) +10 DOUBLE: 4.54413202723805593600e+18 / 0x0043cf880000600000 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +11 DOUBLE: 4.60718241880001740800e+18 / 0x0043cff80000000000 (0 => OK) +12 SINGLE: 1.00097656250000000000e+00 / 0x3f802000 (0 => OK) +12 DOUBLE: 4.60718681684652851200e+18 / 0x0043cff80200000000 (0 => OK) +13 SINGLE: 2.00000000000000000000e+00 / 0x40000000 (0 => OK) +13 DOUBLE: 4.61168601842738790400e+18 / 0x0043d0000000000000 (0 => OK) +14 SINGLE: 2.71828174591064453125e+00 / 0x402df854 (0 => OK) +14 DOUBLE: 4.61330344512900300800e+18 / 0x0043d0016fc2a00000 (0 => OK) +15 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb (0 => OK) +15 DOUBLE: 4.61425665674890444800e+18 / 0x0043d002487ed80000 (0 => OK) +16 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00 (0 => OK) +16 DOUBLE: 4.67923547735248076800e+18 / 0x0043d03bfef8000000 (0 => OK) +17 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +17 DOUBLE: 4.67923561479143424000e+18 / 0x0043d03bff00000000 (0 => OK) +18 SINGLE: 6.55050000000000000000e+04 / 0x477fe100 (0 => OK) +18 DOUBLE: 4.67923575223038771200e+18 / 0x0043d03bff08000000 (0 => OK) +19 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80 (0 => OK) +19 DOUBLE: 4.68373914569932800000e+18 / 0x0043d03ffefc000000 (0 => OK) +20 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +20 DOUBLE: 4.68373921441880473600e+18 / 0x0043d03fff00000000 (0 => OK) +21 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080 (0 => OK) +21 DOUBLE: 4.68373928313828147200e+18 / 0x0043d03fff04000000 (0 => OK) +22 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b (0 => OK) +22 DOUBLE: 5.05642931230815027200e+18 / 0x0043d18b02ead80000 (0 => OK) +23 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff (0 => OK) +23 DOUBLE: 5.18364317056656998400e+18 / 0x0043d1fbfffff80000 (0 => OK) +Converting double-precision to half-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 HALF: 0xffff (0x1 => INVALID) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 HALF: 0xffff (0x1 => INVALID) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 HALF: 0xffff (0x1 => INVALID) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 HALF: 0xffff (0x1 => INVALID) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 HALF: 0xffff (0x1 => INVALID) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 HALF: 0x8000 (0x18 => UNDERFLOW INEXACT ) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 HALF: 0x3ff (0x18 => UNDERFLOW INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 HALF: 0x400 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 HALF: 0x3c00 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 HALF: 0x3c01 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 HALF: 0000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 HALF: 0x3c00 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 HALF: 0x4000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 HALF: 0x416f (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 HALF: 0x4248 (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 HALF: 0x7bfe (0x10 => INEXACT ) +Converting double-precision to single-precision +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK) +00 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x14 => OVERFLOW INEXACT ) +01 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +01 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +02 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK) +02 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff (0x10 => INEXACT ) +03 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK) +03 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a (0x10 => INEXACT ) +04 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK) +04 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d (0x10 => INEXACT ) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +05 SINGLE: 3.22122547200000000000e+09 / 0x4f400000 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +06 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000 (0 => OK) +07 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK) +07 SINGLE: 2.14748364800000000000e+09 / 0x4f000000 (0x18 => UNDERFLOW INEXACT ) +08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK) +08 SINGLE: 2.15587225600000000000e+09 / 0x4f008000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK) +10 SINGLE: 8.38860800000000000000e+06 / 0x4b000000 (0 => OK) +11 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK) +11 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff (0x10 => INEXACT ) +12 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK) +12 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00 (0x10 => INEXACT ) +13 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK) +13 SINGLE: 9.47912704000000000000e+08 / 0x4e620000 (0x10 => INEXACT ) +14 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +14 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +15 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK) +15 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080 (0 => OK) +16 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK) +16 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +17 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK) +17 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +18 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK) +18 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0x18 => UNDERFLOW INEXACT ) +19 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +19 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000 (0 => OK) +20 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK) +20 SINGLE: 1.07374182400000000000e+09 / 0x4e800000 (0 => OK) +21 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK) +21 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0 (0x10 => INEXACT ) +22 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK) +22 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f (0x10 => INEXACT ) +23 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK) +23 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe (0 => OK) +Converting half-precision to single-precision +00 HALF: 0xffff (0 => OK) +00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 SINGLE: -0.00000000000000000000e+00 / 0x80000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 SINGLE: 0.00000000000000000000e+00 / 0000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 SINGLE: 5.96046447753906250000e-08 / 0x33800000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 SINGLE: 6.55360000000000000000e+04 / 0x47800000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 SINGLE: 6.56000000000000000000e+04 / 0x47802000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000 (0 => OK) +Converting half-precision to double-precision +00 HALF: 0xffff (0 => OK) +00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK) +01 HALF: 0xfcff (0 => OK) +01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK) +02 HALF: 0xfc01 (0 => OK) +02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK) +03 HALF: 0xfc00 (0 => OK) +03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK) +04 HALF: 0xfbff (0 => OK) +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK) +05 HALF: 0xc000 (0 => OK) +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK) +06 HALF: 0xbc00 (0 => OK) +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK) +07 HALF: 0x8001 (0 => OK) +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK) +08 HALF: 0x8000 (0 => OK) +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK) +09 HALF: 0000 (0 => OK) +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK) +10 HALF: 0x01 (0 => OK) +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK) +11 HALF: 0x3c00 (0 => OK) +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK) +12 HALF: 0x7bff (0 => OK) +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK) +13 HALF: 0x7c00 (0 => OK) +13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK) +14 HALF: 0x7c01 (0 => OK) +14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK) +15 HALF: 0x7cff (0 => OK) +15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK) +16 HALF: 0x7fff (0 => OK) +16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)