zoukankan      html  css  js  c++  java
  • sicp 练习1.8 【有点疑惑】

    ight:500px;100%;">

    ;cubeRoot函数只适用于x是正数时,负数时是在m函数中处理的。
    (define (cubeRoot x guess)
      ;x除以两次guess,得到result,(要是result等于guess,那么这个guess就是最结果了)
      (define result (/  x  
                        guess
                        guess )
        )
      
      ;improve函数将近似值变得更精确,当符合精度要求是返回0,以提示结束计算
      (define (improve x y)
        (define newY (/(+ (/ x 
                             (* y y)) 
                          (* 2 y))
                       3)
          )
        (if (< (abs(- y 
                      newY)  
                   )
               0.000000000000001  ;精度15位,再多几位会算死机
               )
            0
            newY
            )
        )
      
      ;猜测数不是结果时,改进猜测数,这个函数简单的求两者中值
      (define (updateGuess guess result)
        (/(+ guess 
             result)
          2
          )
        )
      
       (define (goodEnough? guess)
        ;封装improve函数,方便使用,并且减少一次无为调用
        (define improveGuess (improve  x guess)
          )
        (if (= 0 improveGuess);约等以后继续计算更精确的值,当精确度达到一定程度以后,improveGuess返回0,以此结束运算
            guess
            (cubeRoot x improveGuess )
            )
        )
      ;以下是执行代码。 
      (if (<(abs(- guess 
                   result))   ;判断结果是否和猜测值约等
            0.0001)
          (goodEnough? guess)
          (cubeRoot x (updateGuess guess result) )
          )
        
    
      )
    
    ;封装方法,并处理负数情况
    (define (m x)    
        (define lastResult
           (cubeRoot  x 2.0);从2.0开始
          )
          
        (if (< x 0)   ;当x是负数时,结果加上负号.因为负数三次方根只要在它的正数的三次方根的结果上加负号
          (- 0 lastResult);得到负数
          lastResult
          )
     
      )
    ;mst(mistake)函数测试误差有多少
    (define (mst x) 
      (define result (m x))
      (-  (* result result result) x)
      )
     

    > (m 99999999)
    464.15888181408155

    > (mst 99999999)
    -2.9802322387695313e-008

    > (mst 99999999)

    -2.9802322387695313e-008   ;上面计算结果偏小了
    > (m 9999999)  ;卡住了
    . . user break

    疑惑的是更大的数没有卡住,小一点的反而算不出来?这是?

  • 相关阅读:
    二:虚拟游戏摇杆
    一:AndEngine的小例子
    打造属于自己的安卓Metro界面
    linux设备驱动第四篇:驱动调试方法
    C# 二叉查找树实现
    初识 Angular 体会
    C# 霍夫曼二叉树压缩算法实现
    TypeScript笔记[5]泛型+Dictionary 转
    Axiom3D学习日记 5.Frame Listeners, and Input Handling
    Axiom3D学习日记 4.地形,天空,雾
  • 原文地址:https://www.cnblogs.com/jiangzhen/p/1666167.html
Copyright © 2011-2022 走看看