【发布时间】:2016-11-06 23:24:27
【问题描述】:
鉴于我的教授在考试中给我们的这段代码,这意味着我们不能修改代码也不能使用其他库中的函数(stdio.h 除外):
float x;
(suppose x NOT having an integer part)
while (CONDITION){
x = x*10
}
我必须找到条件确保x在小数点右边没有有效数字不注意浮点数的精度问题(小数点后我们有只有零)。我试过这个条件:
while ((fmod((x*10),10))){
X = X*10
}
printf(" %f ",x);
示例:
INPUT x=0.456; --------> OUTPUT: 456.000
INPUT X=0.4567;--------> OUTPUT; 4567.000
It is important to be sure that after the decimal point we don't have any
significant number
但我必须包含 math.h 库,但我的教授不允许我们在这种特定情况下使用它(我什至不允许使用(长时间),因为我们在课堂上从未见过它)。
那么在没有这个库的情况下正确解决问题的条件是什么?
【问题讨论】:
-
这通常没有意义,因为浮点数不能准确地表示大多数数字,并且它的总精度将具有尽可能多的小数位数。
-
你可以学习
floattype 并在内部位上做一些测试 -
我什至不允许使用 (long),因为我们在课堂上从未见过它 这没有意义.... cast 是最简单的方法,尽管正如@2501 已经写的那样,并不准确。
-
您的教授可能应该指定您对该测试的约束以及他/她期望的精度。如果你的教授不知道精度问题,你应该开始考虑改变学校/班级……;)
-
请修改您的问题并给出不同输入和所需输出的清晰示例。