Algorithm 浮点运算
我读到一些机器不能表达精确的浮点数,例如1.1 让我们看一下代码Algorithm 浮点运算,algorithm,Algorithm,我读到一些机器不能表达精确的浮点数,例如1.1 让我们看一下代码 float x=0.1; do{ x+=0.1; printf("%f\n",x); } while(x!=1.1); 此代码从未完成我如何才能完成此代码?可以将其转换为双精度或?例如,在可接受的范围内进行比较。即 while (abs(x-1.1)>0.001); 双打也会有同样的问题,只是更加精确。一些语言还提供rational类型,您可以指定一个数字作为分数1/10,或固定点数据类型。例如,在可接受的范围内进行
float x=0.1;
do{
x+=0.1;
printf("%f\n",x);
} while(x!=1.1);
此代码从未完成我如何才能完成此代码?可以将其转换为双精度或?例如,在可接受的范围内进行比较。即
while (abs(x-1.1)>0.001);
双打也会有同样的问题,只是更加精确。一些语言还提供rational类型,您可以指定一个数字作为分数1/10,或固定点数据类型。例如,在可接受的范围内进行比较。即
while (abs(x-1.1)>0.001);
双打也会有同样的问题,只是更加精确。有些语言还提供rational类型,您可以将数字指定为分数1/10或定点数据类型。在本例中,选中“在本例中,选中“如果您想完全按照您所说的方式编写代码,那么您需要使用类似decimal(如果可用)的类型它是以10为基数的浮点实现,而不是以2为基数的实现
进一步阅读:和如果您想完全按照您所说的那样编写代码,那么您需要使用类似decimal(如果可用)的类型,它是以10为基数的浮点实现,而不是以2为基数的实现
进一步阅读:和在固定点工作,完成那种任务
例如,类型可能会有所帮助。不过,这并不是所有问题的解决方案。针对此类任务,在固定点工作
例如,类型可能会有所帮助。但这并不是所有问题的解决方案。对于数值问题,通常指定精度的ε:
bool within_epsilon(float x, float y, float e) {
if (abs(x - y) > e) {
return false
} else {
return true
}
}
您选择的ε将改变精度,您可以选择的ε取决于浮点实现:。对于数值问题,通常指定精度ε:
bool within_epsilon(float x, float y, float e) {
if (abs(x - y) > e) {
return false
} else {
return true
}
}
您选择的epsilon将改变您的精度,您可以选择的epsilon取决于您的浮点实现:.+1表示epsilon,因为这将使人们能够以更简单的方式搜索此信息+1表示epsilon,由于这将使人们能够以更简单的方式通过谷歌搜索这些信息,你不应该对浮点数使用相等比较。这是我最喜欢的解释,解释为什么浮点数,任何精度或类型,无法准确表示所有实数:不应该对浮点数使用相等比较。这是我最喜欢的解释,解释了为什么任何精度或类型的浮点数都不能准确表示所有实数: