gpt4 book ai didi

header 中定义的常量值会通过数学运算产生意外行为

转载 作者:行者123 更新时间:2023-12-01 16:26:31 26 4
gpt4 key购买 nike

header “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 );

生成以下输出:

SEC:60.000000

PPCM:32.121715

1。速度(厘米/秒):0.00523

2。速度(厘米/秒):0.00523

3.速度(厘米/秒):1.867895

4。速度(厘米/秒):1.867895

问:为什么我不能使用 PPCM 变量进行正确的数学运算?(1. 和 2. 解决方案是错误的)

最佳答案

(速度 * 秒)/PPCM 将等于 (速度 * 秒)/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)

关于 header 中定义的常量值会通过数学运算产生意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23801798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com