|
12鱼币
本帖最后由 无理想的闲鱼 于 2022-11-11 22:17 编辑
问题一:
这是英里和公里的进制转换
- dis = input("千米km结束,英里ml结束:")#如30km
- if dis[len(dis)-2:len(dis)]=="ml":
- km = int(dis[0:len(dis)-2])*1.609334
- print("{}英里为等于{:2f}千米".format(float(dis[:-2]),km))
- if dis[len(dis)-2:len(dis)]=="km":
- ml = int(dis[0:len(dis)-2])/1.609334
- print("{}千米为等于{:2f}英里".format(float(dis[:-2]),ml))
复制代码
百度找一个转换器 10 千米=6.21371192237 英里 100000 千米= 62137.1192237英里 100000000000 千米= 62137119223.73 英里
我的转换出来是 10.0千米为等于6.213751英里 100000.0千米为等于62137.505328英里 100000000000.0千米为等于62137505328.291077英里
怎么解决问题呢?
问题二:
- 3*0.6
- 1.7999999999999998
- 3*0.3
- 0.8999999999999999
复制代码
怎么做到精确计算呢?
本帖最后由 jackz007 于 2022-11-12 14:24 编辑
这个问题问得好,就拿 64 位双精度浮点数来说吧,64 位数总共有 2 ** 64 = 18446744073709551616 个不同的数值,就是说,64 位双精度浮点数所能够表达不同数值的数量是有限的,如果不限制精度,使用这些数字即便是表达 0.00001~0.00002 之间所有的数值甚至都不够用,因为,浮点数无底,对浮点数而言,如果要做到连续表达,任何一个小区间的数据数量都是无穷多的,这就决定了这种数据只能是有限精度数据类型。可以想象一下我们使用的尺子,可以用来测量各种长度,可是,它是通过有限个刻度来进行衡量的,测出的长度一定带有读数误差。我们所使用的浮点数就非常像一把带有有限刻度的尺子,也是通过固定而有限个刻度来对浮点数进行表达的,这就决定了不可能做到想表达多少就能表达多少,只能通过固定的刻度值进行近似地表达。
|
最佳答案
查看完整内容
这个问题问得好,就拿 64 位双精度浮点数来说吧,64 位数总共有 2 ** 64 = 18446744073709551616 个不同的数值,就是说,64 位双精度浮点数所能够表达不同数值的数量是有限的,如果不限制精度,使用这些数字即便是表达 0.00001~0.00002 之间所有的数值甚至都不够用,因为,浮点数无底,对浮点数而言,如果要做到连续表达,任何一个小区间的数据数量都是无穷多的,这就决定了这种数据只能是有限精度数据类型。可以想象一 ...
|