使用C样式转换以正确的精度执行表达式的正确方法是什么?
发布时间:2020-12-16 10:26:17 所属栏目:百科 来源:网络整理
导读:鉴于以下内容: int a = 10,b = 5,c = 3,d = 1;int x = 3,y = 2,z = 2;return (float) a/x + b/y + c/z + d; 这可能会将我们的精度转换为浮动,然后以浮点精度执行我们的分割序列. 使用C样式转换更新此方法的正确方法是什么? 这真的应该改写为: return stat
鉴于以下内容:
int a = 10,b = 5,c = 3,d = 1; int x = 3,y = 2,z = 2; return (float) a/x + b/y + c/z + d; 这可能会将我们的精度转换为浮动,然后以浮点精度执行我们的分割序列. 使用C样式转换更新此方法的正确方法是什么? 这真的应该改写为: return static_cast<float>(a) / static_cast<float>(b) + ... ? 解决方法
首先纠正您的代码:
(float) a/x + b/y + c/z + d 产生7.33333,而正确的结果是8.33333.为什么?因为b / y和c / z除法是以整数形式完成的(demo). 结果不正确的原因是除法优先于加法:你的程序需要将b除以y和c除以z,然后将它们加到x的除法结果中,即浮点数. 您需要转换一个除法操作数才能使其正常工作. C cast工作正常,但是如果你更愿意使用C风格的演员表,你可以这样做: return static_cast<float>(a) / b + static_cast<float>(b) / y + static_cast<float>(c) / z + d; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |