태그 보관물: approximation

approximation

대략적인 내 사각형 tecmath . 어떤 수의

영감을받은 이 비디오 에 의해 tecmath .

어떤 수의 제곱근의 근사값은 x정수 제곱근 복용하여 찾을 수 있습니다 s(즉, 그러한 정수 최대 s * s ≤ x)를 계산 한 후와 s + (x - s^2) / (2 * s). 이 근사를 호출하자 S(x). (참고 : 이것은 Newton-Raphson 방법의 한 단계를 적용하는 것과 같습니다).

이것은 기발한 것이 있지만 S (n ^ 2-1)은 항상 √ (n ^ 2)이지만 일반적으로 매우 정확합니다. 더 큰 경우에는 99.99 % 이상의 정확도를 가질 수 있습니다.

입력과 출력

편리한 형식으로 하나의 숫자를 사용합니다.

형식 : 입력-> 출력

2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37               // actually 4.37       + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91               // actually 6.91       + 1/300
57 -> 7.57               // actually 7.57       + 1/700
2612 -> 51.10            // actually 51.10      + 2/255
643545345 -> 25368.19    // actually 25,368.19  + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481

명세서

  • 출력은 최소한 가장 가까운 100 분의 1로 반올림되어야합니다 (예 : 답이 47.2851 인 경우 47.29를 출력 할 수 있음)

  • 답이 정수이면 출력에 다음과 같은 0과 소수점이 없어도됩니다 (예 : 125.00도 125와 125.0으로 출력 가능)

  • 1 미만의 숫자는 지원하지 않아도됩니다.

  • 정수가 아닌 입력을 지원하지 않아도됩니다. (즉, 1.52 등 …)

규칙

표준 허점 은 금지되어 있습니다.

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.



답변

젤리 ,  8  7 바이트

Olivier Grégoire의 단순화 된 수학 공식 덕분에 -1 바이트 덕분에 Java 답변을 참조하십시오 .

÷ƽ+ƽH

온라인으로 사용해보십시오!

어떻게?

÷ƽ+ƽH - Link: number, n
 ƽ     - integer square root of n  -> s
÷       - divide                    -> n / s
    ƽ  - integer square root of n  -> s
   +    - add                       -> n / s + s
      H - halve                     -> (n / s + s) / 2


답변

하스켈 , 34 바이트

f x=last[s+x/s|s<-[1..x],s*s<=x]/2

온라인으로 사용해보십시오!

명령형 의사 코드의 설명 :

results=[]
foreach s in [1..x]:
 if s*s<=x:
  results.append(s+x/s)
return results[end]/2


답변

Java (OpenJDK 8) , 32 바이트

n->(n/(n=(int)Math.sqrt(n))+n)/2

온라인으로 사용해보십시오!

설명

코드는 다음과 같습니다.

double approx_sqrt(double x) {
  double s = (int)Math.sqrt(x);  // assign the root integer to s
  return (x / s + s) / 2
}

뒤에 수학 :

s + (x - s²) / (2 * s)  =  (2 * s² + x - s²) / (2 * s)
                        =  (x + s²) / (2 * s)
                        =  (x + s²) / s / 2
                        =  ((x + s²) / s) / 2
                        =  (x / s + s² / s) / 2
                        =  (x / s + s) / 2


답변

파이썬 2 , 47 … 36 바이트

@JungHwanMin 덕분에 -3 바이트 @HyperNeutrino 덕분에
-1 바이트 @JonathanFrech 덕분에
-2 바이트
@ OlivierGrégoire 덕분에 -3 바이트

def f(x):s=int(x**.5);print(x/s+s)/2

온라인으로 사용해보십시오!


답변

MATL , 12 9 바이트

X^kGy/+2/

온라인으로 사용해보십시오!


답변

R, 43 바이트 29 바이트

x=scan()
(x/(s=x^.5%/%1)+s)/2

새로운 방정식을위한 @Giuseppe에게 정수 나누기 솔루션으로 12 바이트의 골프를 돕습니다. 스캔을위한 함수 호출을 교체함으로써, 나는 또 다른 몇 바이트를 골랐다.

온라인으로 사용해보십시오!


답변

APL (Dyalog) , 20 16 바이트

{.5×s+⍵÷s←⌊⍵*.5}

온라인으로 사용해보십시오!