因为sqrt函数被声明为
double sqrt(双x);
而你的表达式是18/4*sqrt(4.0)/8,
其中,数字18、4和8是整数,而sqrt(4.0)返回双精度类型。根据C语言中的转换规则(PS:相信你也知道这个,就不多说了),计算出来的结果当然是double类型。
在操作过程中,要先将不同类型的数据转换成统一的类型,然后再进行操作。转换规则如下图所示:
双浮动
长的
无符号的
int ← charshort
箭头仅指示数据类型的级别,从低到高。
1。左边的水平箭头表示一定的转换,比如字符数据必须转换成整数,短数据必须转换成int数据,浮点数据在运算中必须转换成双精度数据,以提高blindside的准确性。即使两个浮点数据加在一起,也会先转换成双精度数据再加在一起。
2。
当操作对象是不同类型时,垂直箭头指示转换的方向。例如,当int类型数据与double类型数据进行运算时,将int类型数据替换为double类型数据,然后在同类型(double类型)的两个数据之间进行运算,结果为double类型。
换句话说,如果一条数据是float或者double类型,那么另一条数据要先转换成double类型,运算结果就是double类型。
从上面可以看出,最后的结果是双!。