c#的数学运算是不是不准啊

imarshal 2017-01-17 01:14:49
代码和java一模一样的基本没改,但结果误差太大了,java的结果和c/c++几乎相同

一开始以为是Math.PI的位数问题,后来自己定义了个长的,发现结果是一样的,搜了下说这是显示截取的问题,那看来只能是Cos或者Sin的问题,为什么会不准啊
...全文
825 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
imarshal 2017-01-17
  • 打赏
  • 举报
回复
代码就是0到7做dft运算,当然是double,不相信的可以自己写个看看,是很接近0的一个数小数点后3位就不对了,我一会调试
crystal_lz 2017-01-17
  • 打赏
  • 举报
回复
空口说貌似我也会貌似C++只能用来写 hello world
  • 打赏
  • 举报
回复
简单问题,却没实际的可执行的东西
Poopaye 2017-01-17
  • 打赏
  • 举报
回复
请举例说明
xiaoyu5425 2017-01-17
  • 打赏
  • 举报
回复
两段代码一起运行调试慢慢看吧
拜一刀 2017-01-17
  • 打赏
  • 举报
回复
代码结构一样就调试对比下查查哪里的问题好了
  • 打赏
  • 举报
回复
感觉lz就是double,float,decimal这种类型的精度问题
zj_zwl 2017-01-17
  • 打赏
  • 举报
回复
是不是数据类型定义的有问题?
xuzuning 2017-01-17
  • 打赏
  • 举报
回复
请举例说明
糖默默 2017-01-17
  • 打赏
  • 举报
回复
请举例说明...
stherix 2017-01-17
  • 打赏
  • 举报
回复
引用 40 楼 imarshal 的回复:
我最后再说句总结下,c#内部用的就是这个pi,和什么位数一点关系没有,问题很明显就是sin/cos,dft这种几行的简单算法能有什么差别,又不是自己写的fft
麻烦你去c++区 java区还有stackoverflow去问这个问题 看他们怎么回答你的
imarshal 2017-01-17
  • 打赏
  • 举报
回复
我最后再说句总结下,c#内部用的就是这个pi,和什么位数一点关系没有,问题很明显就是sin/cos,dft这种几行的简单算法能有什么差别,又不是自己写的fft
stherix 2017-01-17
  • 打赏
  • 举报
回复
引用 38 楼 shingoscar 的回复:
[quote=引用 34 楼 imarshal 的回复:] 这里c#粉丝太多,我不回复了,http://stackoverflow.com/questions/3742692/math-pi-constant-is-wrong,最后一个回复,大家可以去反驳
而且要说精度,这3个语言不都是渣么? [/quote] 因为受限于double的精度 所以真想要高精度,只能找其他办法实现
Poopaye 2017-01-17
  • 打赏
  • 举报
回复
引用 34 楼 imarshal 的回复:
这里c#粉丝太多,我不回复了,http://stackoverflow.com/questions/3742692/math-pi-constant-is-wrong,最后一个回复,大家可以去反驳

而且要说精度,这3个语言不都是渣么?
stherix 2017-01-17
  • 打赏
  • 举报
回复
引用 32 楼 xuzuning 的回复:
你传递给 sin 函数的参数是 3.14159265358979323846,精确到小数点后 20 位 所以结果至多精确到小数点后 20 位(多出来的都无效) 看样子你得先补习一下关于有效数的知识了
然而他认为精确到小数点后20位还不够用 一个dft算法,入口和出口精度要是差上好几个数量级 肯定是算法有问题 而不是来喷yuanshishuju
引用 34 楼 imarshal 的回复:
这里c#粉丝太多,我不回复了,http://stackoverflow.com/questions/3742692/math-pi-constant-is-wrong,最后一个回复,大家可以去反驳
一个14赞的回答你不看 去看一个0赞的?
拜一刀 2017-01-17
  • 打赏
  • 举报
回复
引用 30 楼 imarshal 的回复:
[quote=引用 26 楼 zeratul1990 的回复:] http://bbs.csdn.net/topics/200070627
看来double这种的数学运算不能用c#[/quote] 你确定java之类的就能精确到不止二十位?
拜一刀 2017-01-17
  • 打赏
  • 举报
回复
引用 30 楼 imarshal 的回复:
[quote=引用 26 楼 zeratul1990 的回复:] http://bbs.csdn.net/topics/200070627
看来double这种的数学运算不能用c#[/quote] 你要按这贴的精度,换java也不好使
imarshal 2017-01-17
  • 打赏
  • 举报
回复
这里c#粉丝太多,我不回复了,http://stackoverflow.com/questions/3742692/math-pi-constant-is-wrong,最后一个回复,大家可以去反驳
Poopaye 2017-01-17
  • 打赏
  • 举报
回复
引用 11 楼 imarshal 的回复:
[quote=引用 10 楼 stherix 的回复:] 对50Hz 每个周期8000点的采样数据进行dft运算 误差都极小 你从java改过来的代码,估计有些地方写的不对而已
调试过了,果然是Sin/Cos的问题,比如System.Math.Sin(3.14159265358979323846)和java或者c/c++相比有很大的误差[/quote] 先搞清楚一个理论知识: double的有效位数大概是15或16位 你这个pi已经超标了 所以别管什么误差,输入的精度已经是错的了。
xuzuning 2017-01-17
  • 打赏
  • 举报
回复
你传递给 sin 函数的参数是 3.14159265358979323846,精确到小数点后 20 位 所以结果至多精确到小数点后 20 位(多出来的都无效) 看样子你得先补习一下关于有效数的知识了
加载更多回复(22)

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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