不懂就问:c++输出sin有误差

圈外人CoLEe 2018-12-02 10:14:01
如图
...全文
376 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2018-12-22
  • 打赏
  • 举报
回复
0.5 对于 10 进制来说是精确表示的。 但是对于二进制就不是了。
Xyino_Snake 2018-12-20
  • 打赏
  • 举报
回复
一个数出现两个小数点,第一时间应该想到是缺了换行符。
python没有这个问题。但是python自动输出换行符经常成为问题...
圈外人CoLEe 2018-12-03
  • 打赏
  • 举报
回复
引用 10 楼 @风轻云淡_的回复:
[quote=引用 9 楼 Co_CoLEe 的回复:]
[quote=引用 3 楼 IAMPSH的回复:]肯定有误差的,因为计算机不可能存无限位
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;



int main(void){
double i=0;
for(i;i!=10;i+=0.1){

}
cout <<"over" <<endl;

return 0;
}

这份代码会死循环,因为i不会等于10

我不是很懂为什么输出结果是0.500000.866...会有两个小数点[/quote]
你两个输出之间没有换行符,当然显示在同一行了,从第二个小数点前一位的0开始,就是第二个输出结果了。0.500000 0.855026 这是两个结果啊,哪来的两个小数点。。。[/quote] 奥粗心了哈哈哈哈哈哈
赵4老师 2018-12-03
  • 打赏
  • 举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
@风轻云淡_ 2018-12-03
  • 打赏
  • 举报
回复
引用 9 楼 Co_CoLEe 的回复:
[quote=引用 3 楼 IAMPSH的回复:]肯定有误差的,因为计算机不可能存无限位
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;



int main(void){
double i=0;
for(i;i!=10;i+=0.1){

}
cout <<"over" <<endl;

return 0;
}

这份代码会死循环,因为i不会等于10

我不是很懂为什么输出结果是0.500000.866...会有两个小数点[/quote]
你两个输出之间没有换行符,当然显示在同一行了,从第二个小数点前一位的0开始,就是第二个输出结果了。0.500000 0.855026 这是两个结果啊,哪来的两个小数点。。。
圈外人CoLEe 2018-12-03
  • 打赏
  • 举报
回复
引用 3 楼 IAMPSH的回复:
肯定有误差的,因为计算机不可能存无限位
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;



int main(void){
double i=0;
for(i;i!=10;i+=0.1){

}
cout <<"over" <<endl;

return 0;
}

这份代码会死循环,因为i不会等于10
我不是很懂为什么输出结果是0.500000.866...会有两个小数点
圈外人CoLEe 2018-12-03
  • 打赏
  • 举报
回复
引用 2 楼 weixin_38305120的回复:
在计算机体系内,所有浮点数都存在误差,这是因为二进制小数转换过程中存在“除不尽”的原因。
0.500000为什么后面又有.866...
圈外人CoLEe 2018-12-03
  • 打赏
  • 举报
回复
0.500000后面的.8几是什么
zhouqunhai 2018-12-03
  • 打赏
  • 举报
回复
有误差,c++中tan取得也是近视值
@风轻云淡_ 2018-12-03
  • 打赏
  • 举报
回复
同问,sin30不就是1/2吗,float取6位小数,没问题啊。
呵哈吼嘿嗨 2018-12-03
  • 打赏
  • 举报
回复
sin30°不就是0.500000嘛
赵4老师 2018-12-02
  • 打赏
  • 举报
回复
Conchpeng 2018-12-02
  • 打赏
  • 举报
回复
肯定有误差的,因为计算机不可能存无限位
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;



int main(void){
double i=0;
for(i;i!=10;i+=0.1){

}
cout <<"over" <<endl;

return 0;
}

这份代码会死循环,因为i不会等于10
weixin_38305120 2018-12-02
  • 打赏
  • 举报
回复
在计算机体系内,所有浮点数都存在误差,这是因为二进制小数转换过程中存在“除不尽”的原因。

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧