2016-06-09 3 views
0

그래서이 값의 차이가 끝날 때까지 필요한만큼 반복되는이 작은 코드 조각이 있습니다. 코드를 실행 한 후에 반복되는 횟수를 세고 인쇄하는 것이 바람직합니다. (필자가 필요로하는 모든 것을 인쇄하는 것과 함께).Go에서 반복 횟수를 어떻게 계산합니까?

편집 : 좋아, 나는 이렇게 할 수 있었다. 반복을 세어 출력 함수로 전달하는 더 쉬운 방법이 있는지 궁금합니다.

func sqrt(x float64) (float64, int) { 
    k := 1 
    z := 1.0 
    q := (z*z - x)/(2*z) 
    for { 
     if math.Abs(-q) > 0.001 { 
     z -= q 
     q = (z*z - x)/(2*z) 
     k += 1 
     } else { 
     break 
     } 
    } 
    return z, k 
} 

func main() { 
    k := 1 
    z := 1.0 
    z, k = sqrt(9) 
    fmt.Println("Your sqrt = ", z) 
    fmt.Println("Math Sqrt = ",math.Sqrt(9)) 
    fmt.Println("Iterations: ", k) 
} 
+0

go와 함께 여러 개의 반환 값을 전달할 수 있습니다. 단순히 함수의 서명을 func sqrt (x float64) (float64, int) {} –

+0

@ william.taylor.09와 같이 변경하고 k가 정수의 이름 인 경우 z 대신 k를 반환합니다. 인쇄용으로 어떻게 분리합니까? 내 게시물을 원래 출력으로 업데이트했습니다. – Arthmost

+0

답변보기 아래에 게시 됨 –

답변

1

당신은 당신의 부동 소수점 값 (반복의 수) int를 반환 할 수 있습니다. 저는 여러분의 모범을 보여주기 위해 아주 사소한 수정을했습니다.

func sqrt(x float64) (float64, int) { 

    z := 1.0 
    i := 1 
    q := (z*z - x)/(2 * z) 
    for { 
     if math.Abs(-q) > 0.01 { 
      i++ 
      z -= q 
      q = (z*z - x)/(2 * z) 
     } else { 
      break 
     } 
    } 
    return z, i 
} 

func main() { 
    f, i := sqrt(9) 
    fmt.Printf("result: %f iterations: %d\n", f, i) 
    fmt.Println(math.Sqrt(9)) 
} 
+0

고마워, 너는 기본적으로 내 원래의 질문과 내가 다른 사람이 기능 출력 (최종 출력을위한 값을 전달하고 분리)을 도와 준 직후였다. if 루프 내부에 정수를 계산하는 반복을 넣음으로써 실수를 저지른 것을 봅니다. 나는 내가이 운동으로 더 잘했을 수도있는 다른 것이 있는지 궁금합니다. – Arthmost

+0

내가 다르게했을 것 같은 일들 :'else' 브랜치에'return z, i'을 옮기고'break'가 필요 없으면'i : = 1'과 반대로'var i int'를 선언하고 for 루프 상단에'1 ++'을 붙이십시오. 출력에 영향을주지 않으면 서 스타일에 영향을 미치지 않습니다. – Snowman

+0

반복 루프를 반복하는 대신 반복 횟수를 줄이는 반복 횟수를 알고 있기 때문에 반복 루프 정수를 반복 루프 내부에 두는 것이 더 좋을 것이라고 생각하지 않습니까? 또한, 0으로 시작하는 대신 1로 시작하십시오. – Arthmost

1

당신은 당신의 기능을 통해 여러 반환 값을 제공 할 수 있습니다 : 여기

func main() { 
    numLoops, newNum := sqrt(9) 
} 

func sqrt(x float64) (int, float64) { 
    <implementation> 
} 

GoPlay : https://play.golang.org/p/R2lV41EbEd

+1

굉장, 고마워! 나는 당신이 코멘트를 쓰는 것처럼 코드를 작성하고 있었고 우리는 같은 구현을했다. 내 것은 처음에는 출력 함수 내부의 변수를 초기화 한 다음 내 계산 함수의 출력을 할당했기 때문에 조금 사납다. – Arthmost

관련 문제