加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读