(我暂时将问题标记为“ C”,但是如果您知道另一种支持联合的语言,则也可以使用它。)
您的任务是+ - * /
为以下结构构建四个标准数学运算符:
union intfloat{
double f;
uint8_t h[8];
uint16_t i[4];
uint32_t j[2];
uint64_t k;
intfloat(double g){f = g;}
intfloat(){k = 0;}
}
这样操作本身就只能操纵或访问整数部分(因此也不能在操作过程中的任何时候都与double进行比较),并且结果是完全相同的(对于非数字结果,例如,功能上是等效的NaN
)好像相应的数学运算已直接应用于double
。
您可以选择要操作的整数部分,甚至可以在不同的运算符之间使用不同的整数部分。(尽管我不确定您是否要这样做,您也可以选择从联合中的任何字段中删除“未签名”。)
您的分数是四个运算符中每个字符的代码长度总和。最低分获胜。
对于不熟悉IEEE 754规范的我们来说,这是一篇有关Wikipedia的文章。
编辑:
03-06 08:47在intfloat结构中添加了构造函数。您可以使用它们进行测试,而不必手动设置double /etc。
1
kes!告诉我您有解决方案。
—
dmckee ---前主持人小猫
嗯......也许会有更好的定义
—
dmckee ---前版主小猫
intstruct
来讲uint8_8
,uint16_t
等为一体的绝对大小short
,int
等不被标准定义(每种类型都有一个最小尺寸并且在大小有严格的排序,但而已)。
我猜想,即使没有高尔夫球,这也是一种很棒的(且具有挑战性的)做法
—
John Dvorak
该问题可以使用有关如何处理舍入的文档以及良好的测试套件。
—
彼得·泰勒
我敢肯定它在规格中,但真正的规格要花费几百美元。可能有一些免费提供的描述,但是IMO应该在提问者的身上提出此类详细信息(或至少包含到可能在几年后仍存在的站点的链接)。问题,而不是回答者去寻找必要的材料以了解问题的实质。
—
彼得·泰勒