Python+tensorflow计算整数阶乘的方法与局限性

本文代码主要演示tensorflow的基本用法。

import tensorflow as tf

# 创建变量,保存计算结果 start = tf.Variable(1, dtype=tf.int64)

# 初始化变量的op init_op = tf.global_variables_initializer()

# 启用默认图

with tf.Session() as sess: # 初始化变量 sess.run(init_op)

# 执行计算 for i in range(2, 31): # 创建常量 t = tf.constant(i,dtype=tf.int64) # 创建乘法的op和重新赋值的op new_value = tf.mul(start, t) update = tf.assign(start, new_value) # 执行计算 sess.run(update) # 输出结果 print(t.eval(),':',sess.run(start))

上面代码的运算结果为:

2 : 2 3 : 6 4 : 24 5 : 120 6 : 720 7 : 5040 8 : 40320 9 : 362880 10 : 3628800 11 : 39916800 12 : 479001600 13 : 6227020800 14 : 87178291200 15 : 1307674368000 16 : 20922789888000 17 : 355687428096000 18 : 6402373705728000 19 : 121645100408832000 20 : 2432902008176640000 21 : -4249290049419214848 22 : -1250660718674968576 23 : 8128291617894825984 24 : -7835185981329244160 25 : 7034535277573963776 26 : -1569523520172457984 27 : -5483646897237262336 28 : -5968160532966932480 29 : -7055958792655077376 30 : -8764578968847253504

可以看出,当整数大于20之后,阶乘的计算结果就不对了,这是因为tensorflow的变量类型和常量类型设置为tf.int64的原因,很遗憾似乎这已经是tensorflow的极限了,毕竟实现机制与Python并不一样,不能像Python一样表示任意大小的数字,如果把上面代码中的int64修改为float64固然可以表示更大的数字,但是由于浮点数精度问题会有很大的误差。下面的纯Python代码则不会有任何问题,当然还可以支持更大整数的阶乘,大家可以自行试验。

>>> import math >>> for i in range(2, 31): print(i,':',math.factorial(i))

2 : 2 3 : 6 4 : 24 5 : 120 6 : 720 7 : 5040 8 : 40320 9 : 362880 10 : 3628800 11 : 39916800 12 : 479001600 13 : 6227020800 14 : 87178291200 15 : 1307674368000 16 : 20922789888000 17 : 355687428096000 18 : 6402373705728000 19 : 121645100408832000 20 : 2432902008176640000 21 : 51090942171709440000 22 : 1124000727777607680000 23 : 25852016738884976640000 24 : 620448401733239439360000 25 : 15511210043330985984000000 26 : 403291461126605635584000000 27 : 10888869450418352160768000000 28 : 304888344611713860501504000000 29 : 8841761993739701954543616000000 30 : 265252859812191058636308480000000

在外地出差讲Python,每天6小时,连续5天,昨天凌晨5点出门,今天凌晨1点到达宾馆安顿好,今天讲了6小时感觉还不是太累,晚上就在宾馆看点资料写点代码分享一下,做程序员和老师确实需要个好体力啊。

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Java经典设计模式之五大创建型模式(附实例和详解)

(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

1091
来自专栏编程

C语言干货,新手入门必看,基础知识大汇总!

习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面...

2915
来自专栏北京马哥教育

Python元编程:控制你想控制的一切

很多人不理解“元编程”是个什么东西,关于它也没有一个十分准确的定义。这篇文章要说的是Python里的元编程,实际上也不一定就真的符合“元编程”的定义。只不过我...

2974
来自专栏Python中文社区

Python元编程:控制你想控制的一切

專 欄 ❈松直,Python中文社区专栏作者,计算机在读,Python拥趸,知乎专栏:从Python开始❈ 很多人不理解“元编程”是个什么东西,关于它也没有一...

2188
来自专栏青蛙要fly的专栏

Android技能树 — 排序算法基础小结

现在安卓面试,对于算法的问题也越来越多了,要求也越来越多,特别是排序,基本必考题,而且还动不动就要手写,所以陆续要写算法的文章,也正好当自己学习。o(╥﹏╥)o

872
来自专栏Python小屋

Python字符串index()方法应用案例一则

683
来自专栏学习力

《Java从入门到放弃》JavaSE入门篇:异常

1823
来自专栏Fundebug

5分钟掌握JavaScript小技巧

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

1011
来自专栏DannyHoo的专栏

iOS开发中swift中的类方法和实例方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1243
来自专栏琯琯博客

设计模式详解

需要说明的一点是,文中的 UML 类图和规范的 UML 类图不大相同,其中组合关系使用以下箭头表示:

1093

扫码关注云+社区

领取腾讯云代金券