我理解为什么我们需要在标准头文件中包含这个:
#define M_PI 3.14159265358979323846 // pi
然而,我并没有看到拥有这些东西的太多好处:
#define M_PI_2 1.57079632679489661923 // pi/2
#define M_PI_4 0.785398163397448309616 // pi/4
#define M_1_PI 0.318309886183790671538 // 1/pi
#define M_2_PI 0.636619772367581343076 // 2/pi
在实际代码中,与使用
M_PI/2
、M_PI/4
、1/M_PI
和2/M_PI
相比,这些的使用是否有优势?(在2020年及以后)拼出来的表达式难道不更易读吗?
我问这个问题主要是出于两个原因。首先,有一天我不小心混淆了
M_PI_2
和M_2_PI
(甚至还可能是2 * M_PI
),花费了一段时间才发现有问题,然后又花费了一段时间才找出根本原因。如果只是阅读使用它们的代码而没有看到定义,仍然认为这不是非常明显的M_PI_2
和M_2_PI
表示什么,那么使用这些定义实际上是一种降低代码可读性的反模式吗?其次,在Windows(Visual C++)中,拥有这些定义仍然可能存在问题。与其定义所有这些变量,我更喜欢定义只有
M_PI
,然后在代码中说M_PI/2
而不是M_PI_2
。我有什么遗漏吗?
std :: numbers
中标准化(至少是pi和1/pi)。 - walnut