Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <stdio.h>
#include <math.h>
/*
* During the development of OpenGL on NT, we have had problems * with the compiler and floating point. Here are a few simple * sanity checks to make sure the compiler didn't regress. */
#define POW_TEST \
/* pow(0,0) should be 1 not 0 */ \ f = (float)pow(0.0, 0.0); \ printf("pow(0.0, 0.0) is %f ", f); \ if (f == 1.0F) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ }
#define FLOOR_TEST \
/* floor() would always return 0! */ \ d = floor(8.123); \ printf("floor(8.123) is %lf ", d); \ if (d == 8.0) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ } \ d = floor(63.5); \ printf("floor(63.5) is %lf ", d); \ if (d == 63.0) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ }
int nointrin(void); int CastTest(void);
main() { float f; double d; int errorcount = 0;
f = (float)pow(0.0, 3.0); if (f != 0.0F) { printf("pow(0.0, 3.0) not 0.0! ERROR\n"); errorcount++; } else { printf("pow(0.0, 3.0) is 0.0 Correct\n"); }
POW_TEST;
FLOOR_TEST;
errorcount += CastTest();
errorcount += nointrin();
if (errorcount) printf("%d errors in test\n", errorcount); else printf("\nAll tests passed\n");
return errorcount; }
int CastTest() { double dMaxUint; unsigned int uiResult;
dMaxUint = 4294967295.0;
uiResult = (unsigned int)dMaxUint;
printf("uiResult(0x%08lX) = (unsigned int)dMaxUint(%lf) ", uiResult, dMaxUint); if (uiResult == 0xffffffff) { printf("Correct\n"); return 0; } else { printf("ERROR\n"); return 1; } }
#pragma function (pow)
#pragma function (floor)
int nointrin() { float f; double d; int errorcount = 0;
printf("\n\nNot using intrinsic functions for:\n"); printf("pow()\n"); printf("floor()\n"); printf("\n");
POW_TEST;
FLOOR_TEST;
return errorcount; }
|