重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1. 与依赖于任何浮动的问题(math.sqrt(x)或x**0.5)是你不能真正确定它的准确(对充分大的整数x,它不会是,甚至有可能溢出)。幸运的(如果是不急于;-)有很多纯整数的方法,如下面的...:
在成都做网站、网站制作过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。成都创新互联还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。
def is_square(apositiveint):
x = apositiveint // 2
seen = set([x])
while x * x != apositiveint:
x = (x + (apositiveint // x)) // 2
if x in seen: return False
seen.add(x)
return True
for i in range(110, 130):
print i, is_square(i)
提示:它是基于“巴比伦算法”的平方根,请参阅维基百科。它适用于任何正数,而您有继续 编辑:让我们看一个例子...
x = 12345678987654321234567 ** 2
for i in range(x, x+2):
print i, is_square(i)
这种版画,根据需要(和太;-)一个合理的金额:
152415789666209426002111556165263283035677489 True
152415789666209426002111556165263283035677490 False
请您提出了一种基于浮点结果的解决方案之前 CodeGo.net,确保他们正确地工作在这个简单的例子-它不是那么难(你只需要一些额外的检查,以防是有点过),只是需要多一点的关怀。 然后尝试用x**7并找到解决您会得到这个问题巧妙的方式,
OverflowError: long int too large to convert to float
你必须得到越来越多的聪明的数量不断增加,当然。 如果我很着急,当然,我gmpy-但后来,我明显偏向;-)。
import gmpy
gmpy.is_square(x**7)
1
gmpy.is_square(x**7 + 1)
是啊,我知道,这只是很容易感觉像作弊(有点我总体感觉对Python的;-)的方式-没有聪明可言,只是完美的直接和简单(和,在gmpy,绝对速度的情况下;-) ...
2. 用牛顿的快速零最接近的整数的平方根,那么它平方,看看它是否是你的号码。见isqrt。
3. 因为你永远无法靠当浮动(如计算平方根的这些方式),一个不易出错将是对处理
import math
def is_square(integer):
root = math.sqrt(integer)
if int(root + 0.5) ** 2 == integer:
return True
else:
return False
想像integer是9。math.sqrt(9)可能是3.0的,但它也可以是像2.99999或3.00001,因此现蕾结果马上是不可靠的。知道int取整数值,通过增加浮点值0.5我们会得到我们要找的,如果我们是在一个范围内的值,其中float仍然有足够细的分辨率来表示附近的一个为我们所期待的数字。
4. 我是新来的堆栈溢出,并做了一个快速脱脂找到解决的办法。我只是张贴在另一个线程(寻找完美的正方形)上的例子,一个细微的变化上面,我想我会包括什么,我贴在这里有一个细微的变化(使用nsqrt作为一个临时变量),如果它的利益/使用:
import math
def is_perfect_square(n):
if not ( ( isinstance(n, int) or isinstance(n, long) ) and ( n = 0 ) ):
return False
else:
nsqrt = math.sqrt(n)
return nsqrt == math.trunc(nsqrt)
5. 你可以二进制搜索的圆形平方根。平方的结果,以确定它的原始值相匹配。 你可能会更好过与FogleBirds回答-虽然小心,因为浮点数是近似的,它可以抛出这种方法了。你可以在原则上得到一个假阳性从一个大的整数,较完美的正方形,例如,由于丢失精度1以上。
6.
def f(x):
... x = x ** 0.5
... return int(x) == x
...
for i in range(10):
... print i, f(i)
...
0 True
1 True
2 False
3 False
4 True
5 False
6 False
7 False
8 False
9 True
7. 决定多久的数量就越大。 采取增量0.000000000000 ....... 000001 见,如果(SQRT(X))^ 2-x是大于/等于/大于δ较小并且基于增量误差决定。
8. 我不知道Python的,但你可以不喜欢:
function isSquare(x) = x == floor(sqrt(x) + 0.5)^2
也就是说,拿一个数,求平方根,四舍五入到最接近的整数,它平方,并测试它是作为原来的号码。 (floor并加入0.5做是为了防止类似案件sqrt(4)回国1.9999999...由于浮点运算,麦克grahams指出。) 如果你有兴趣,曾经有一个很好的判断以最快的方式,如果一个整数的平方根是一个整数。 编辑澄清。
9. 该回复不属于你的declarative的问题,而是一个隐含的问题,我在您发布的代码中看到,即“如何检查是否是整数?” 优先个回答你通常得到这个问题是“不要!”并且这是真的,在Python,类型检查不应该做的事情。 对于那些极少数的异常,不过,不是寻找数字的字符串表示小数点,那东西做isinstance函数:
isinstance(5,int)
True
isinstance(5.0,int)
False
当然适用于变量,而不是一个值。如果我想确定该值是否是一个整数,我会做到这一点:
x=5.0
round(x) == x
True
但正如其他人已经详细介绍,也有这种事情的大多数非玩具的例子来加以考虑浮点问题。
10. 我有轻微的原始巴比伦的方法。取而代之的是一套以存储每个生成的近似,只是最近的两个近似的存储和核对电流近似。这保存了大量的通过整套的近似值的浪费检查。我的java,而不是python和BigInteger类,而不是一个正常的原始整数。
BigInteger S = BigInteger.ZERO;
BigInteger x = BigInteger.ZERO;
BigInteger prev1 = BigInteger.ZERO;
BigInteger prev2 = BigInteger.ZERO;
Boolean isInt = null;
x = S.divide(BigInteger.valueOf(2));
while (true) {
x = x.add(preA.divide(x)).divide(BigInteger.valueOf(2));
if (x.pow(2).equals(S)) {
isInt = true;
break;
}
if (prev1.equals(x) || prev2.equals(x)) {
isInt = false;
break;
}
prev2 = prev1;
prev1 = x;
}
try except 不可以处理吗?把你的正常代码替换到1/0这个位置。try外面再包裹个while类的,异常后还可以继续重新走正常流程
import traceback
try:
1/0
#except Exception,e:
# print traceback.format_exc()
except Exception , e:
print e
1、概念不一样:数学是研究数量、结构、变化、空间以及信息等概念的一门学科。而物理则是研究物质运动最一般规律和物质基本结构的学科。
2、精密性不一样:物理的理论结构充分地运用数学作为自己的工作语言,以实验作为检验理论正确性的唯一标准,是当今最精密的一门自然科学学科。数学在精密性这方面相对来说不像物理那般,而是用严谨性来形容。
3、起源不一样:数学起源于人类早期的生产活动,古巴比伦人从远古时代开始已经积累了一定的数学知识,并能应用实际问题。物理则是起源于人类社会实践的发展。
扩展资料:
数学简史:
西方数学简史
数学的演进大约可以看成是抽象化的持续发展,或是题材的延展.而东西方文化也采用了不同的角度,欧洲文明发展出来几何学,而中国则发展出算术。
第一个被抽象化的概念大概是数字(中国的算筹),其对两个苹果及两个橘子之间有某样相同事物的认知是人类思想的一大突破.除了认知到如何去数实际物件的数量,史前的人类亦了解如何去数抽象概念的数量,如时间—日、季节和年.算术(加减乘除)也自然而然地产生了。
中国数学简史
数学古称算学,是中国古代科学中一门重要的学科,根据中国古代数学发展的特点,可以分为五个时期:萌芽;体系的形成;发展;繁荣和中西方数学的融合。
物理简史:
伽利略·伽利雷(1564~1642年)人类现代物理学的创始人,奠定了人类现代物理科学的发展基础。
当今物理学和科学技术的关系两种模式并存,相互交叉,相互促进“没有昨日的基础科学就没有今日的技术革命”。
参考资料:
百度百科-数学
百度百科-物理
思路:
巴比伦算法的原理说白了就是求这么一个x使得x * x = n.
但问题是为什么迭代可以求得x的值呢?
原理如下:
假设最终返回的结果是x(n), 那么按照迭代算法来看显然是从x(n - 1)推导过来的。
即:
x(n) = (x(n - 1) + N / x(n - 1)) / 2
做个变形就可以得到:
x(n - 1) ^ 2 - 2 * x(n) * x(n - 1) + N = 0
将N用a * a 替换,就得到了如下式子:
x(n - 1) ^ 2 - 2 * x(n) * x(n - 1) + a ^ 2 = 0
因为x(n) = a,所以有:
x(n - 1) ^ 2 - 2 * a * x(n - 1) + a ^ 2 = 0;
即:
(x(n - 1) - a) ^ 2 = 0;
因为x(n - 1) 和 x(n) 是很接近的,为了解释这点可以从两个角度着手:
第一个角度:数学角度
x(n) = ( x(n - 1) + N / x(n - 1)) / 2
令函数G(x) = x(n)
那么,G(x)这个函数是一个对勾函数,在第一象限有一个最小值等于x,该最小值的位置为(x, N / x),
所以只要找到这个点求出该点的G(x)那么我们就能解决该问题,而我们的解决方法便是从x 0的位置起,
逐步逼近这个极值点。因此,当lim(n-无穷大)x(n) = x(n - 1)
另外一个角度:程序角度
当跳出while(y + eps x)循环时,这时候x(n)和x(n - 1)无限接近
正是由于x(n)接近于x(n - 1),才得到如下的式子:
(x(n) - a) ^ 2 = 0
最后便得到了x(n) = a
题目连接:leetcode Sqrt(x)
class GetRoot {
public:
constdouble eps = 1e-9;
public:
double RootNumber(double n) {
double x = n;
double y = 1;
while (x y + eps) {
x = (x + y) / 2;
y = n / x;
}
return x;
}
};
int main(void) {
GetRoot ans;
double n;
while (cin n) {
cout ans.RootNumber(n) endl;
}
return 0;
}
二次函数的平移规律有个口诀:
加左减右,加上减下。
意思就是当二次函数写成下面这个样子时:
y=a(x+b)²+c,只要将y=ax²的函数图像按以下规律平移:
(1)b0时,图像向左平移b个单位(加左);
(2)b0时,图像向右平移b个单位(减右);
(3)c0时,图像向上平移c个单位(加上);
(4)c0时,图像向下平移c个单位(减下)。
二次函数最大值最小值求法
设函数是y=ax²+bx+c,其中a称为二次项系数,b为一次项系数,c为常数项。x为自变量,y为因变量。a0时开口向上,有最小值,当x=-b/2a时,取得最小值为y=(4ac-b^2)/4a;a0时开口向下,有最大值,当x=-b/2a时,取得最大值为y=(4ac-b^2)/4a。
二次函数简介
二次函数的基本表示形式为y=ax²+bx+c(a≠0)。二次函数最高次必须为二次,二次函数的图像是一条对称轴与y轴平行或重合于y轴的抛物线。
二次函数表达式为y=ax²+bx+c(且a≠0),它的定义是一个二次多项式(或单项式)。
如果令y值等于零,则可得一个二次方程。该方程的解称为方程的根或函数的零点。
大约在公元前480年,古巴比伦人和中国人已经使用配方法求得了二次方程的正根,但是并没有提出通用的求解方法。公元前300年左右,欧几里得提出了一种更抽象的几何方法求解二次方程。
7世纪印度的婆罗摩笈多是第一位懂得使用代数方程的人,它同时容许有正负数的根。