1225 5

[问答] r的数学库是不是不精确啊 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

61%

还不是VIP/贵宾

-

威望
0
论坛币
377 个
通用积分
4.0079
学术水平
0 点
热心指数
6 点
信用等级
0 点
经验
3788 点
帖子
92
精华
0
在线时间
177 小时
注册时间
2016-3-20
最后登录
2022-8-7

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
比如print(sin(pi)),结果和python不一样
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python print int

沙发
cheetahfly 在职认证  发表于 2017-2-28 08:14:05 |只看作者 |坛友微信交流群
sin(pi)的精确值应该为0,
因为pi是无限小数,
无论是{R}的sin(pi)还是{python}的math.sin(math.pi)计算出来的都是近似值,只不过精度不同罢了。

使用道具

cheetahfly 发表于 2017-2-28 08:14
sin(pi)的精确值应该为0,
因为pi是无限小数,
无论是{R}的sin(pi)还是{python}的math.sin(math.pi)计算出 ...
为什么不一样啊,python和c是一样的

使用道具

板凳
cheetahfly 在职认证  发表于 2017-2-28 23:01:55 |只看作者 |坛友微信交流群
在C++中,我们找到math.hpp文件,中间有这么一段:
c++_pi.png
相对来说,C++是小数位后保留最多的。
在python中,我们找到math2.py,其中有一段:
python_pi.PNG
你自己可以数一数小数点后有多少位。
在R中,我没有直接找到源代码,不过可以用下面两种放大大致推断出大概到小数点后15位:
R_pi.PNG
上图红圈处已经开始出错了。
从上面可以看到就pi的精度而言C++大于python大于R。——当然,计算结果差异还有部分来自计算方式的不同,这里不讨论了。
不过,在实践中上面三者的差别不大,因为反正都是错误的,是近似值,两个相同的近似值并不能把结果变为精确值。
如果真正要精确计算,比如用专业数学软件Mathematica,随随便便显示到小数点后1000位,而且sin(pi)就是0!
mathematica_sinpi.PNG

使用道具

cheetahfly 发表于 2017-2-28 23:01
在C++中,我们找到math.hpp文件,中间有这么一段:

相对来说,C++是小数位后保留最多的。
不是浮点数和pi的长度问题,pi内部存储都是一样的,8个字节,有效位也就16、17位,只不过显示时会截取

就是数学库的问题,r计算得到的这个值和c#是一样的,查看c#的内存会发现,尾数的大部分都是0,没有计算

使用道具

一般的浮点数都是64位,不知道math.hpp和math2.py是什么,只知道math.h和import math

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 22:42