标题“main.h”定义了以下变量:
#define FRAMERATE 60.0f
#define RES_WIDTH 1920.0f
#define RES_HEIGHT 1080.0f
#define RATIO_X 16.0f
#define RATIO_Y 9.0f
#define INCH 27.0f
#define HEIGHT sqrt( pow(INCH,2.0f) / (pow((RATIO_X/RATIO_Y),2.0f) + 1.0f) ) * 2.54f
#define WIDTH (RATIO_X * HEIGHT) / RATIO_Y
#define PPCM RES_WIDTH / WIDTH
#define SEC 60.0f
问题可视化的测试代码:
float speed = 1.0f; // Pixle / Frame
printf("SEC: %f\n", SEC); // Frames per Second
printf("PPCM: %f\n", PPCM); // Pixle per centimeter
printf("1. Speed (CM/SEC): %f\n", (speed * SEC) / PPCM ); // speed in cm/second
printf("2. Speed (CM/SEC): %f\n", (speed * 60.0f) / PPCM );
printf("3. Speed (CM/SEC): %f\n", (speed * SEC) / 32.121715f );
printf("4. Speed (CM/SEC): %f\n", (speed * 60.0f) / 32.121715f );
生成以下 OUTPUT :
SEC:60.000000
PPCM:32.121715
1。速度(CM / SEC):0.00523
2。速度(CM / SEC):0.00523
3。速度(CM / SEC):1.867895
4。速度(CM / SEC):1.867895
问:为什么我不能用PPCM变量进行正确的数学运算?(1.和2.解决方案错误)
答案 0 :(得分:5)
(speed * SEC) / PPCM
将等于(speed * SEC) / RES_WIDTH / WIDTH
。
始终在左侧放置括号:
#define HEIGHT (sqrt( pow(INCH,2.0f) / (pow((RATIO_X/RATIO_Y),2.0f) + 1.0f) ) * 2.54f)
#define WIDTH ((RATIO_X * HEIGHT) / RATIO_Y)
#define PPCM (RES_WIDTH / WIDTH)