让你定义一个宏,说出一年有多少秒:
答案如下:
#define SECONDS_PER_YEAR 60*60*24*365(UL)
“这样的好处是:写出公式而不用动手计算,让编译器给你计算,省脑子。重点是你还写出了结果的来源,条理清晰,便于阅读。还有,那个UL显示了你对数据大小的严谨,”
“切~用你说?谁不知道?”——看到这,很多人一定对这个帖子嗤之以鼻,相信这是很多C语言玩家烂熟于心的一个答案了吧?!
SECONDS_PER_YEAR就是秒每年吧——秒/年!
那么,一年到底有多少秒?我再换个问法,每年都一样么?闰年你又怎么解决?众所周知,每四年有一个闰年,这还不是全部,逢百年的时候你必须用年份除以四百,除得开才是闰年。
地球围绕太阳公转一周(即360度)的时间应该为365日6时9分10秒,即为一个恒星年。
地球的某点获得两次两次直射的间隔是365日5时48分46秒(更加精确:365天5小时48分45.975456秒),即为一个回归年。
一个回归年折算成小数,大概是365.2422日,400年里多出了96.88天,而按四年一个闰年算,400年里少3个闰年,即总共97个闰年,闰年是调节回归年的。前边也提了闰年规则是四年一补,补多了要减去点,如果按恒星年补,四年一个闰年还不够,哪会让你四百年内还少三个闰年呢。
看到这里,相信各位小伙伴已经有答案了:
#define 365*24*60*60+5*60*60+48*60+46(UL)
//很有条理很清晰吧?怎么样,我说,你还不如用计算器了~~一定要加上文字注释~!!!
不过还有意外,他问的会不会是恒星年?恒星年就按如下定义
#define 365*24*60*60+6*60*60+9*60+10(UL)
//一定要加上文字注释~~告诉他这是恒星年
我们也看到,没有什么东西是那么精确的,如果按365天5小时48分45.975456秒算,那应该使用浮点数
31556925.9754456(这还不是绝对精度~~~)
如果按这个数,32位的浮点还是够用的。
怎么样,躺着中枪了吧,这么简单的C语言你都不会,回去面壁吧。
不过还有方法,你跟他说你这次定义的是日历非闰年:
#define SECONDS_PER_YEAR_Non_Leap_Year 60*60*24*365(UL)
绕回来了#define SECONDS_PER_YEAR_Leap_Year 60*60*24*366(UL)
深藏功与名,叫我胡学究
带上你的贞操和逻辑,欢迎较真抬杠,转发请注明出处。