hp41programs

Hypersphere Hyperspheres for the HP-41
 

Overview
 

-"HS" calculates the hypervolume ( Vn ) and the hypersurface area ( Sn ) of an n-dimensional unit hypersphere  ( 1 < n < 188 )
-If the radius of the hypersphere equals R, multiply Vn by Rn  and Sn by Rn-1


 

4 Programs
 

Formula:    Vn = pin/2/(n/2)!   ;   Sn = n.Vn

Data Registers: /
Flags: /
Subroutines: /
 
 

 01  LBL "HS"
 02  ENTER^
 03  STO Z
 04  2
 05  ST/ Z
 06  MOD
 07  1
 08  +
 09  X<>Y
 10  INT
 11  STO Z
 12  LBL 01
 13  CLX
 14  PI
 15  ST* Y
 16  X<> L
 17  ST/ Y
 18  SIGN
 19  ST- L
 20  DSE Z
 21  GTO 01
 22  R^
 23  *
 24  X<>Y
 25  ST* Y
 26  END

 
( 43 bytes / SIZE 000 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /            Sn
           X             n            Vn
           L             /             n

Examples:

    3  XEQ "HS"  >>>>      V3 =  4.1888             X<>Y      S3 =  12.5664
    4      R/S        >>>>      V4 =  4.9348             X<>Y      S4 =  19.7392
  187    R/S        >>>>   V187 =  2.7182 10-99    X<>Y   S187 =  5.0830 10-97   ( in 31seconds )

-Vn is maximum for n = 5 and  Sn is maximum for n = 7.
-For n > 187 this program returns zero.
 

-If we use smaller n, we can use a smaller program:
 

Data Registers: R00 = n
Flags: /
Subroutines: /
 
 

 01 LBL "HS"
 02 STO 00
 03 2
 04 /
 05 ENTER
 06 INT
 07 X=Y?
 08 GTO 01
 09 FACT
 10 PI
 11 LASTX
 12 Y^X
 13 *
 14 2
 15 RCL 00
 16 Y^X
 17 *
 18 RCL 00
 19 GTO 02
 20 LBL 01
 21 PI
 22 LASTX
 23 Y^X
 24 LASTX
 25 LBL 02
 26 FACT
 27 /
 28 RCL 00
 29 X<>Y
 30 ST* Y
 31 END

 
( 41 bytes / SIZE 001 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /            Sn
           X             n            Vn

Examples:

  69 XEQ "HS"  >>>>  V69 = 8.1475 10-23    X<>Y    S69 = 5.6218 10-21                    ( 1 < n < 70 )
 138  XEQ "HS"  >>>>  V138 = 1.1750 10-64    X<>Y    S138 = 1.6215 10-62              ( 1 < n < 139 )


-We can also compute V and S with n and R

Data Registers: R00 = n    R01 = R
Flags: /
Subroutines: /
 
 

 01 LBL "HS"
 02 STO 01
 03 X<>Y
 04 STO 00
 05 2
 06 /
 07 ENTER
 08 INT
 09 X=Y?
 10 GTO 01
 11 FACT
 12 PI
 13 LASTX
 14 Y^X
 15 *
 16 2
 17 RCL 00
 18 Y^X
 19 *
 20 RCL 00
 21 GTO 02
 22 LBL 01
 23 PI
 24 LASTX
 25 Y^X
 26 LASTX
 27 LBL 02
 28 FACT
 29 /
 30 RCL 00
 31 X<>Y
 32 ST* Y
 33 RCL 01
 34 RCL 00
 35 DSE X
 36 Y^X
 37 ST* Z
 38 *
 39 RCL 01
 40 *
 41 END

 
( 53 bytes / SIZE 002 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             n            Sn
           X             R            Vn


Examples:
        n = 8 or 9   ,   R = 20

  8   ENTER^
 20  XEQ "HS"  >>>>  V8 = 1.0390 1011    X<>Y    S8 = 4.1561 1010                        ( 1 < n < 70 )

  9   ENTER^
 20  XEQ "HS"  >>>>  V9 = 1.6888 1012    X<>Y    S9 = 7.5998 1011                       ( 1 < n < 139 )


-Here is a smaller program:


Data Registers: R00 and R01
Flags: /
Subroutines: /
 
 

 01 LBL "HS"
 02 STO 01
 03 2
 04 /
 05 STO 00
 06 FRC
 07 PI
 08 1/X
 09 X<>Y
 10 X#0?
 11 X<>Y
 12 X=0?
 13 SIGN
 14 RCL 00
 15 LBL 01
 16 /
 17 PI
 18 *
 19 DSE 00
 20 ABS
 21 RCL 00
 22 X>0?
 23 GTO 01
 24 CLX
 25 RCL 01
 26 X<>Y
 27 ST* Y
 28 R^
 29 ST/ Z
 30 RCL 01
 31 Y^X
 32 ST* Z
 33 *
 34 END

 
( 46 bytes / SIZE 002 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             R            Sn
           X             n            Vn


-With   1 < n < 186  if   R is not too large.

Examples:        n = 8 or 9   ,   R = 20

 20   ENTER^
  8  XEQ "HS"  >>>>  V8 = 1.0390 1011    X<>Y    S8 = 4.1561 1010                      

 20   ENTER^
  9  XEQ "HS"  >>>>  V9 = 1.6888 1012    X<>Y    S9 = 7.5998 1011