Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests - chapter 1 exercises 7, 8 #664

Merged
merged 2 commits into from Feb 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion resources/lang/ru/exercises/1_7.php
Expand Up @@ -7,6 +7,6 @@
'Кроме того, в настоящих компьютерах арифметические операции почти всегда вычисляются с ограниченной точностью. ' .
'Поэтому наш тест оказывается неадекватным и для очень больших чисел. ' .
'Альтернативный подход к реализации good-enough? состоит в том, чтобы следить, как от одной итерации к другой изменяется guess, и остановиться, когда изменение оказывается небольшой долей значения приближения. ' .
'Разработайте процедуру вычисления квадратного корня, которая использует такой вариант проверки на завершение. ' .
'Разработайте процедуру вычисления квадратного корня square-root, которая использует такой вариант проверки на завершение. ' .
'Верно ли, что на больших и маленьких числах она работает лучше?',
];
2 changes: 1 addition & 1 deletion resources/lang/ru/exercises/1_8.php
Expand Up @@ -7,7 +7,7 @@
"Метод Ньютона для кубических корней основан на том, что если y является приближением к кубическому корню из x, " .
"то мы можем получить лучшее приближение по формуле",
'2' =>
"С помощью этой формулы напишите процедуру вычисления кубического корня, подобную процедуре для квадратного корня. " .
"С помощью этой формулы напишите процедуру вычисления кубического корня cube-root, подобную процедуре для квадратного корня. " .
"(В разделе 1.3.4 мы увидим, что можно реализовать общий метод Ньютона как абстракцию этих процедур для квадратного и кубического корня.)",
],
];
8 changes: 4 additions & 4 deletions resources/views/exercise/solution_stub/1_7.blade.php
Expand Up @@ -5,7 +5,7 @@
{!! $solution !!}
;;; END

(check-equal? (round (* 1000 (sqrt 4.0))) 2000.0)
(check-equal? (round (* 1000 (sqrt 100.0))) 10000.0)
(check-equal? (round (* 1000 (sqrt 1000000.0))) 1000000.0)
(check-equal? (round (* 1000 (sqrt 0.04))) 200.0)
(check-equal? (round (* 1000 (square-root 4.0))) 2000.0)
(check-equal? (round (* 1000 (square-root 100.0))) 10000.0)
(check-equal? (round (* 1000 (square-root 1000000.0))) 1000000.0)
(check-equal? (round (* 1000 (square-root 0.04))) 200.0)
Expand Up @@ -13,5 +13,5 @@
guess
(sqrt-iter (improve guess x) x)))

(define (sqrt x)
(define (square-root x)
(sqrt-iter 1.0 x))
11 changes: 11 additions & 0 deletions resources/views/exercise/solution_stub/1_8.blade.php
@@ -0,0 +1,11 @@
#lang racket/base
(require rackunit)

;;; BEGIN
{!! $solution !!}
;;; END

(check-equal? (round (* 1000 (cube-root 8.0))) 2000.0)
(check-equal? (round (* 1000 (cube-root 1000.0))) 10000.0)
(check-equal? (round (* 1000 (cube-root 1000000000.0))) 1000000.0)
(check-equal? (round (* 1000 (cube-root 0.008))) 200.0)
17 changes: 17 additions & 0 deletions resources/views/exercise/solution_stub/1_8_solution.blade.php
@@ -0,0 +1,17 @@
(define (sqr x) (* x x))

(define (cube x) (* x x x))

(define (improve guess x)
(/ (+ (* 2 guess) (/ x (sqr guess))) 3))

(define (good-enough? guess x)
(< (abs (- (cube guess) x)) 0.000001))

(define (cube-root-iter guess x)
(if (good-enough? guess x)
guess
(cube-root-iter (improve guess x) x)))

(define (cube-root x)
(cube-root-iter 1.0 x))