作业帮 > 数学 > 作业

把3.5转换为单精度数和双精度数,单精度数3.500000,(因为单精度有效位数7位),那么双精度有效位数15——16位

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/07/03 06:10:22
把3.5转换为单精度数和双精度数,单精度数3.500000,(因为单精度有效位数7位),那么双精度有效位数15——16位岂不是3.50000000000000了?可是我看有些双精度没保留那么多啊
计算机中浮点数的存储是不精确的,双精度比单精度更精确而已.所以有关浮点数的运算都是近似的,如输出1.0-0.9的结果不是0.1,而是0.09999999999999998.只有整数的运算才是精确的结果.所以3.5在计算机中存的不是3.5后加0.而是像上面那样的数字
再问: 那么3.5转化为双精度是3.50000000000000吗?
再答: 你是要理论还是实际,你写这样一条语句double c = (1.0 - 0.9);然后用VS,VC开发工具去debug,看看c的值是什么,具体是哪个近似值我不太清楚,但肯定不是3.50000000000000,需要我去debug的你再追问
再问: 若是有一题就是需要你把3.5转化为双精度的数该怎么做
再答: 当然程序中你可以使用强制转换(double)3.5;这样,C++中还有其他安全地类型转换运算符,具体我忘记了。但有这点需要注意,3.5在程序中默认就是double类型了,你可以这样验证:fun(float, double),当你传3.5进去fun(3.5, 3.5);第二个参数不会报错,第一个参数会报错,因为你不使用强制转换不能将double转为float,由此可见3.5就是double类型,也就是双精度,不知道你要怎么转
再问: 就像这样,但我不知道该添多少个0

再答: 这个问题是格式化输出,请看这篇网页: http://hi.baidu.com/ejxzntbomebbcxq/item/21c521d1cc77dd3ae3108f83 它里面提到了单精度和双精度的%f输出问题。 由于格式化输出有时会发生截断跟四舍五入,具体的机制我也不是太清楚。 main(){ /*Rectangle a(4,5); Rectangle b(5,6); Area c(a,b); cout