ขอความช่วยเหลือครับ เกี่ยวกับโค้ด C++

กระทู้คำถาม
#include <cassert>
#include <iostream>
using namespace std;

double akpower(double x,int p)
{
int n =p;
double xn = x;

double result = 1.0;

while (1<= n)
{

    if ( n%2 == 0)
    {
    n = n/2;
    xn = xn * xn;
    }
    else
    {
    n = n-1;
    result = result *xn;
    }
}
    return result;

}

int main ()
{
    double i;
    cin >> i;
    int j;
    cin >>j;

    cout << akpower( i, j) ;

    return 0;
}

คือตามข้างบนอ่ะครับ
เค้าให้โค้ดอันนี้มา โดยอ้างอิงว่ามันคือ Algorithm ของ Al-kashi
มันเป็นโค้ดสำหรับไว้ ยกกำลังตัวเลขครับ ป้อนค่าเข้าไปสองค่า
ค่าแรกเป็น ฐาน ค่าสองเป็นเลขยกกำลัง

ประเด็นอยู่ที่ว่าเค้าต้องการให้ดัดแปลง ให้ใช้ เลขยกกำลังติดลบได้ด้วย
ผมก็ลองทำดูอะครับ ว่าจะลองแปลโค้ดก่อนว่าหลักการทำงานมันทำยังไง

ที่งงเลยคือ "ยิ้ม มาได้ไงวะเห้ยยย"
ไม่เห็นคำสั่งอะไรใช้เลขยกกำลัง เห็นมีแต่คูณ ๆ result =1
ตอนนี้งงมากจริง ๆ ครับ เลยอยากให้ผู้รู้มาช่วยอธิบายการทำงานโค้ดนี่หน่อยอะครบ ถ้าเป็นไปได้

ขอบคุณล่วงหน้าครับ หัวเราะ
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่