diff --git a/src/02-quaternion/Quaternion.ts b/src/02-quaternion/Quaternion.ts
index 62b877e2a152916fbf5fcf00d14af61676b9b9e8..227f697196e298dc8f57d7f0e4587d2f68569658 100644
--- a/src/02-quaternion/Quaternion.ts
+++ b/src/02-quaternion/Quaternion.ts
@@ -116,7 +116,7 @@ export class Quaternion {
 
         const sinTheta0 = Math.sin(theta0);
         const sinTheta = Math.sin(theta);
-        const s0 = Math.cos(theta0) - dot * sinTheta / sinTheta0;
+        const s0 = Math.cos(theta) - dot * sinTheta / sinTheta0;
         const s1 = sinTheta / sinTheta0;
 
         return Quaternion.add(
@@ -168,6 +168,6 @@ export class Quaternion {
     }
 
     public static inverse(qa: Quaternion): Quaternion {
-        return new Quaternion(-qa._x, -qa._y, -qa._z, qa._w);
+        return new Quaternion(-qa._x, -qa._y, -qa._z, -qa._w);
     }
 }
\ No newline at end of file
diff --git a/src/02-quaternion/Rotator.ts b/src/02-quaternion/Rotator.ts
index 16990162ab0b330a1f5b9d7968dc376668c0cae6..927796fd8f3155e33225634144540c0d8e603555 100644
--- a/src/02-quaternion/Rotator.ts
+++ b/src/02-quaternion/Rotator.ts
@@ -167,9 +167,9 @@ class Rotator implements PipelineObserver, PipelineGUI {
         if (this._mode === Mode[0] && this._orientations.length !== 0) {
             this._objectReference.setRotationFromMatrix(this._orientations[this._index].eulerMatrix);
         } else if (this._mode === Mode[1] && this._orientations.length > 1) {
-            let result: Quaternion = Quaternion.slerp(this._orientations[0], this._orientations[1], this._t);
+            let result: Quaternion = Quaternion.slerpCG3(this._orientations[0], this._orientations[1], this._t);
             for (let i = 2; i < this._orientations.length; i++) {
-                result = Quaternion.slerp(result, this._orientations[i], this._t);
+                result = Quaternion.slerpCG3(result, this._orientations[i], this._t);
             }
             this._objectReference.setRotationFromMatrix(result.eulerMatrix);
             this._slerp.copy(result);