鲸悦海 发表于 2021-9-29 00:34:45

问题求解

10*T*T/2;
1/2*10*T*T
这两个的区别是啥?
小白求解答

wp231957 发表于 2021-9-29 07:19:51

第二个答案是0,第一个取决于T的类型

番杰 发表于 2021-9-29 10:30:35

第一个:
(1)T是浮点类型(使用 float、double...定义),结果会是一个小数。
例如:T = 1.5; 结果就是10 * 1.5 *1.5 /2 = 11.25。

(2)T是一个整数类型(使用int、long、unsigned int ... 定义),结果会是一个整数,舍弃余数,
又因为本身前面*10,所以不管T取值为多少,都可以整除2,所以说结果本身就不存在舍弃的余数。
例如:T = 3;结果为10*3*3/2=45.

另外:若题目为T*T/2   ,T = 3,结果则为3*3/2 = 4(余数为1,被舍弃)。

第二个:

无论T取什么类型的值,结果都为零。
原因:1/2 = 0(余数为1,被舍弃),0*任何值均为零,所以无论T取什么类型的值,结果都为零。

若计算小数:则把题目改为:1.0/2.0*10*T*T,此时 1.0/2.0 = 0.5啦!

鲸悦海 发表于 2021-9-29 12:39:34

wp231957 发表于 2021-9-29 07:19
第二个答案是0,第一个取决于T的类型

欧克

鲸悦海 发表于 2021-9-29 12:40:59

番杰 发表于 2021-9-29 10:30
第一个:
(1)T是浮点类型(使用 float、double...定义),结果会是一个小数。
例如:T = 1.5; 结果就是 ...

那怎么写可不可以弄成1/2=0.5

番杰 发表于 2021-9-29 12:54:04

鲸悦海 发表于 2021-9-29 12:40
那怎么写可不可以弄成1/2=0.5

那你只能先定义一个浮点型的数据,然后让它 = 1/2;
例如:
float i ;
i = 1/2;

这个时候算出的i的值就是0.5,
其中,你写是写出i = 1/2;
但是对于编译器看来,你写入的其实是:i = 1.0/2.0;(因为你限制了i的类型为浮点型)

鲸悦海 发表于 2021-9-29 13:18:32

番杰 发表于 2021-9-29 12:54
那你只能先定义一个浮点型的数据,然后让它 = 1/2;
例如:
float i ;


谢谢大佬

番杰 发表于 2021-9-29 14:21:31

鲸悦海 发表于 2021-9-29 13:18
谢谢大佬

{:5_109:}
页: [1]
查看完整版本: 问题求解