民科吧 关注:360,990贴子:4,865,377
  • 43回复贴,共1

其实三江并不是完全错的,编程做累加的程序确实有问题

只看楼主收藏回复

我看不少人直接编程做累加来打脸三江,三江狡辩说计算机在做1/n的运算的时候是把精确的有理数变成了计算机无法准确表达的无理数而导致误差的引入。这句话说的确实没错。不少吧友缺乏对计算机浮点数的认识,这点上三江似乎更准确一些


IP属地:加拿大1楼2019-05-20 01:03回复
    虽然三江没有认识到这点误差不足以对结果产生影响,但是他提到的误差确实是存在的


    IP属地:加拿大2楼2019-05-20 01:10
    回复
      下面给出一个无误差的程序,每一步的累加都采用有理数运算,不用浮点数。由于有理数在计算机内部是通过分子和分母来表示的,所以有理数是可以被计算机精确表达的。有理数运算的算法和人手算的算法一致。
      from fractions import Fraction
      s = Fraction(1, 1)
      for i in range(2, 200):
      s += Fraction(1, i**3)
      print(s)
      print("{}".format(float(s)))


      IP属地:加拿大3楼2019-05-20 01:13
      收起回复
        @三江方士
        还有什么想说的嘛。不承认累加就滚吧,这个问题的定义就是累加,不承认累加等于不承认这个问题,那你还snmb呢


        IP属地:加拿大6楼2019-05-20 01:20
        收起回复
          对了10万块钱什么时候到账,等着你的钱吃饭呢,不然饿死了


          IP属地:加拿大7楼2019-05-20 01:23
          回复
            一般人确实对浮点误差缺乏认识,但像matlab这类的专业数学计算软件都对这种高精度长位数的数字计算有特别的处理技巧,所以没问题


            IP属地:北京来自iPhone客户端8楼2019-05-20 01:28
            收起回复
              因为这种情况下是浮点数过小导致round到0,所以结果只会比真实值小。但即便是这样也比它推出来的结果大,我觉得用于反驳它这一点没有问题@贴吧用户_0WZV34S 老狗你来看看


              IP属地:中国澳门来自Android客户端10楼2019-05-20 07:28
              回复
                ∑1/n³=119/99问题比较简单,n不到200就破解了。
                ∑1/n=57点几,实算有难度,先估算n的量级,大约n是10^23量级是累加和大于57点几,用matlab算的话,小数点后30位够,但速度慢,那用c算,为提高精度,算到40位应该足够了,但速度仍不够,得用性能强劲cpu,当然,这里还很多细节问题。


                来自手机贴吧11楼2019-05-20 11:13
                收起回复