.net中如何提高除法运算的精度?

xingeddx 2016-05-12 12:18:25
RT。
我在计算两条直线的交点时,先列出公式,然后把数据代入,用C#语言;运算的结果不如人意,比如本来的结果应该是50,结果却是53.34768. 。
有人遇到过类似的事情没有?请教。
...全文
286 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingeddx 2016-05-15
  • 打赏
  • 举报
回复
引用 15 楼 xuzuning 的回复:
误差肯定是有的,但就不会是你说的 50 和 53.34768 这样! 取整后(屏幕中的最小分辨率是像素)不会超过一个点 我怀疑是你的算式有问题
的确,是我的版式有问题,目前已经解决了,是版式的问题,代码就不贴出来了,就是两条直线的两点式求交点。 感谢回帖子的各位!
  • 打赏
  • 举报
回复
实际上你可以选择开源的、一般的数学家用的.net 数学计算软件包,不用自己写各类计算方法。这些软件包都是针对计算机而设计的。
  • 打赏
  • 举报
回复
“被除数、除数”之中,如果除数非常接近于0,那么对误差的影响就会非常大。所以通常“解方程组”的算法会在“消元”时(此时需要将主元的倒数与各列参数相成)首先判断系数是否接近0,如果接近0则把别的行跟原来的行进行对调。甚至可能每一步消元时都选择“距离0最大的主元”跟原来的行进行对调,以控制消元时的误差。
SoulRed 2016-05-12
  • 打赏
  • 举报
回复
浮点数运算导致的误差不是某个语言造成的,而是由于计算机二进制算法体制造成的,和语言无关,尽量转换成足够大的整数进行除法运算
crystal_lz 2016-05-12
  • 打赏
  • 举报
回复
引用 6 楼 shingoscar 的回复:
double精度再差,像你这样的偏差,我觉得应该公式或者期望值有问题

这种差距还是可能出现的 比如

除数的差距基本可以忽略不计 但是结果差距却很大
所谓 失之毫厘谬以千里 差不多就是这么回事吧
Poopaye 2016-05-12
  • 打赏
  • 举报
回复
double精度再差,像你这样的偏差,我觉得应该公式或者期望值有问题
assky124 2016-05-12
  • 打赏
  • 举报
回复
用decimal
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
误差肯定是有的,但就不会是你说的 50 和 53.34768 这样! 取整后(屏幕中的最小分辨率是像素)不会超过一个点 我怀疑是你的算式有问题
xingeddx 2016-05-12
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
不知你们在做什么高精尖的项目 一般工程(包括数理分析)误差控制在 10% 以内就可以了,精密设备也就是 1% 误差 如果真的需要很高的精度,不是还有高精度数学运算库吗? 你测定一条直线能精确到小数点几位?
没有弄什么高端的东西,我是想得到一条直线和一个线段的交点,通过我手写的公式计算出来了这两个直线的交点,结果认为是点A吧,最后我用A的坐标计算是否在线段上时出现了误差。现在想一下,我感觉可能需要从算法上考虑。
为轮子而生 2016-05-12
  • 打赏
  • 举报
回复
浮点数本身就是一种近似的表达实数的形式,在计算机中,因为考虑到每个数值占用空间的问题,并不可能都用最大精确度。实际上用double就已经比float精确度高不少。 建议百度一下IEEE754标准,你就会明白其中原理。
crystal_lz 2016-05-12
  • 打赏
  • 举报
回复
引用 12 楼 shingoscar 的回复:
[quote=引用 10 楼 crystal_lz 的回复:] 而且数据一样 顺序不一样 也会有不一样结果
试试1234567.0 / 2.0 / 0.12345[/quote] 好吧结果一样了 上面是 1234567 / 2 先运算的话是 int 会损失一个 0.5
Poopaye 2016-05-12
  • 打赏
  • 举报
回复
引用 10 楼 crystal_lz 的回复:
而且数据一样 顺序不一样 也会有不一样结果
试试1234567.0 / 2.0 / 0.12345
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
不知你们在做什么高精尖的项目 一般工程(包括数理分析)误差控制在 10% 以内就可以了,精密设备也就是 1% 误差 如果真的需要很高的精度,不是还有高精度数学运算库吗? 你测定一条直线能精确到小数点几位?
crystal_lz 2016-05-12
  • 打赏
  • 举报
回复
引用 9 楼 shingoscar 的回复:
[quote=引用 7 楼 crystal_lz 的回复:]
[quote=引用 6 楼 shingoscar 的回复:]
double精度再差,像你这样的偏差,我觉得应该公式或者期望值有问题

这种差距还是可能出现的 比如

除数的差距基本可以忽略不计 但是结果差距却很大
所谓 失之毫厘谬以千里 差不多就是这么回事吧[/quote]你太主观了,这两个除法真的是差那么多[/quote]

而且数据一样 顺序不一样 也会有不一样结果
Poopaye 2016-05-12
  • 打赏
  • 举报
回复
引用 7 楼 crystal_lz 的回复:
[quote=引用 6 楼 shingoscar 的回复:]
double精度再差,像你这样的偏差,我觉得应该公式或者期望值有问题

这种差距还是可能出现的 比如

除数的差距基本可以忽略不计 但是结果差距却很大
所谓 失之毫厘谬以千里 差不多就是这么回事吧[/quote]你太主观了,这两个除法真的是差那么多

110,538

社区成员

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

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

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