为什么Double数据类型在这里工作

时间:2012-12-09 06:23:27

标签: c++ c algorithm

我在UVa上做problem。问题陈述如下:

我们必须找到数p的第n个根,并且存在整数k,使得k ^ n = p。所以基本上我们必须找到整数k。

约束:

p <10 ^ 101 ,n <200,k <10 ^ 9。 所有变量都是整数和正数。

c中问题的AC解决方案只是计算,

pow(p,1/n);

我知道double可以保存数据到e308,但据我所知,精确到15位小数。

所以我的问题是为什么上面的解决方案有效,是否会出现任何精度错误?

2 个答案:

答案 0 :(得分:3)

数字10 ^ 101看起来很大。如果n为2,则无法在任何地方存储k。

但如果你看其他约束 - k限制为10 ^ 9。需要30位无符号类型。双尾数的尾数可以很容易地实现。

答案 1 :(得分:0)

提示:问题陈述需要多少小数位?