对于我的C ++课程,教师说他会给任何提交有魔术数字的程序评分为零。他说,即使对于计算圆的面积这样的公式(常见的知识是3.14159是Pi的值,我们应该使用const变量或#define指令来表示Pi,然后在公式中使用它)。
话虽如此,我正在进行财务计算,我在确定税前账单的金额。该函数的snipet是:
mealCostBeforeTax = billAmount / (1.0 + taxRate_);
taxRate_
是以十进制百分比(例如0.08)传递给函数的参数。因此,为了确定税前的金额,我必须在taxRate中加1,使其为1.08。
我的问题是,因为教师1.0是一个神奇的数字。该值的适当名称是什么?
这也引出了另一个问题。当我使用公式时,是否有一个资源或方向,我可以帮助理解函数中的某些常量被调用,或者它们代表什么。
例如,当将温度从摄氏温度转换为华氏温度时,公式为Tf =(9/5)* Tc + 32。如何找出9/5代表什么以及32代表。我会假设32是华氏温标的水的冰点,但这只是猜测。我想象的9/5是比例之间的某种比例,但这些都是猜测。
对不起文字墙。但我真的想写一个彻底的问题,希望其他人可能会觉得它很有用。
答案 0 :(得分:4)
总而言之,我认为将此公式中的1.0称为幻数有点极端。并非每个字面数字都必须是一个神奇的数字。重点是让你的代码可读,这样看着它的人就不必猜测为什么你凭空挑选了这个数字。
在这种情况下,我认为解决方案是将计算包装在一个函数中,而不是试图为1提供#define。如果我看到另一个程序,你有一个像{的语句,上帝帮助我{1}}因为程序员正在遵循幻数规则的字母,而不是意图。
#define one 1
特别是对于将F转换为C等常见公式,这才有意义。根据经验,如果在计算中使用的常量/定义有一个明显的名称,请在代码中使用它而不是裸号。但是,不要强迫这个问题走极端。
我当然会和你的教授一起确认这个假设。他们可能非常迂腐到荒谬的地步,因为他们生活在理论而不是现实世界中,并且经常要求遵守严格的规则,因为他们是规则遗忘他们背后的原因。