開発者様
さっきの投稿にミスがあったので、訂正しようとしたら時既におすし! Museのごとくレスポンス早いですねぇ。
>(+0)-(+0) はいくつ? >(-0)-(-0) はいくつ? >(+0)+(-0) はいくつ? これら、演算するといずれも内部表現上プラス0でした。
代入時点では、もちろんマイナス0になりますし、 演算結果でマイナス0になるものもあります。 (-0)+(-0)とか。
ワル乗りで試したソースそのままを公開します。 コメントになっているassert文が例外発生する行です なので、以下の状態だと正常終了します
#include "stdafx.h" #include <assert.h> #include <stdint.h>
int _tmain(int argc, _TCHAR* argv[]) { double x,y,z;
printf("double length = %dbyte\n",sizeof (double));
// z = +0; z = +0.0; assert(z <= +0.0); //assert(z < +0.0); assert(z == +0.0); assert(z == -0.0); assert(z >= -0.0); //assert(z > -0.0); //assert(*(uint_fast64_t *)&z == 0x8000000000000000UL); assert(*(uint_fast64_t *)&z == 0x0000000000000000UL);
// z = -0; z = -0.0; assert(z <= +0.0); //assert(z < +0.0); assert(z == +0.0); assert(z == -0.0); assert(z >= -0.0); //assert(z > -0.0); assert(*(uint_fast64_t *)&z == 0x8000000000000000UL); //assert(*(uint_fast64_t *)&z == 0x0000000000000000UL);
// (+0)-(+0) はいくつ? x = +0.0; y = +0.0; z = x - y; printf("x=%ld y=%ld z=%ld\n",x,y,z); assert(z <= +0.0); //assert(z < +0.0); assert(z == +0.0); assert(z == -0.0); assert(z >= -0.0); //assert(z > -0.0); //assert(*(uint_fast64_t *)&z == 0x8000000000000000UL); assert(*(uint_fast64_t *)&z == 0x0000000000000000UL);
// (-0)-(-0) はいくつ? x = -0.0; y = -0.0; z = x - y;
assert(z==+0.0); assert(z==-0.0); assert(*(uint_fast64_t *)&z == 0x0000000000000000UL); //assert(*(uint_fast64_t *)&z == 0x8000000000000000UL);
// (+0)+(-0) はいくつ? x = +0.0; y = -0.0; z = x + y;
assert(z==+0.0); assert(z==-0.0); assert(*(uint_fast64_t *)&z == 0x0000000000000000UL); //assert(*(uint_fast64_t *)&z == 0x8000000000000000UL);
// (-0)+(-0) x = -0.0; y = -0.0; z = x + y;
assert(z==+0.0); assert(z==-0.0); //assert(*(uint_fast64_t *)&z == 0x0000000000000000UL); assert(*(uint_fast64_t *)&z == 0x8000000000000000UL);
return 0; }
|