62 lines
2.9 KiB
Text
62 lines
2.9 KiB
Text
begin
|
|
% Algol W only supplies sin, cos and arctan as standard. We can define %
|
|
% arcsin, arccos and tan functions using these. The standard functions %
|
|
% use radians so we also provide versions that use degrees %
|
|
|
|
% convert degrees to radians %
|
|
real procedure toRadians( real value x ) ; pi * ( x / 180 );
|
|
% convert radians to degrees %
|
|
real procedure toDegrees( real value x ) ; 180 * ( x / pi );
|
|
% tan of an angle in radians %
|
|
real procedure tan( real value x ) ; sin( x ) / cos( x );
|
|
% arcsin in radians %
|
|
real procedure arcsin( real value x ) ; arctan( x / sqrt( 1 - ( x * x ) ) );
|
|
% arccos in radians %
|
|
real procedure arccos( real value x ) ; arctan( sqrt( 1 - ( x * x ) ) / x );
|
|
% sin of an angle in degrees %
|
|
real procedure sinD( real value x ) ; sin( toRadians( x ) );
|
|
% cos of an angle in degrees %
|
|
real procedure cosD( real value x ) ; cos( toRadians( x ) );
|
|
% tan of an angle in degrees %
|
|
real procedure tanD( real value x ) ; tan( toRadians( x ) );
|
|
% arctan in degrees %
|
|
real procedure arctanD( real value x ) ; toDegrees( arctan( x ) );
|
|
% arcsin in degrees %
|
|
real procedure arcsinD( real value x ) ; toDegrees( arcsin( x ) );
|
|
% arccos in degrees %
|
|
real procedure arccosD( real value x ) ; toDegrees( arccos( x ) );
|
|
|
|
|
|
% test the procedures %
|
|
begin
|
|
|
|
real piOver4, piOver3, oneOverRoot2, root3Over2;
|
|
piOver3 := pi / 3; piOver4 := pi / 4;
|
|
oneOverRoot2 := 1.0 / sqrt( 2 ); root3Over2 := sqrt( 3 ) / 2;
|
|
|
|
|
|
r_w := 12; r_d := 5; r_format := "A"; s_w := 0; % set output format %
|
|
|
|
write( "PI/4: ", piOver4, " 1/root(2): ", oneOverRoot2 );
|
|
write();
|
|
write( "sin 45 degrees: ", sinD( 45 ), " sin pi/4 radians: ", sin( piOver4 ) );
|
|
write( "cos 45 degrees: ", cosD( 45 ), " cos pi/4 radians: ", cos( piOver4 ) );
|
|
write( "tan 45 degrees: ", tanD( 45 ), " tan pi/4 radians: ", tan( piOver4 ) );
|
|
write();
|
|
write( "arcsin( sin( pi/4 radians ) ): ", arcsin( sin( piOver4 ) ) );
|
|
write( "arccos( cos( pi/4 radians ) ): ", arccos( cos( piOver4 ) ) );
|
|
write( "arctan( tan( pi/4 radians ) ): ", arctan( tan( piOver4 ) ) );
|
|
write();
|
|
write( "PI/3: ", piOver4, " root(3)/2: ", root3Over2 );
|
|
write();
|
|
write( "sin 60 degrees: ", sinD( 60 ), " sin pi/3 radians: ", sin( piOver3 ) );
|
|
write( "cos 60 degrees: ", cosD( 60 ), " cos pi/3 radians: ", cos( piOver3 ) );
|
|
write( "tan 60 degrees: ", tanD( 60 ), " tan pi/3 radians: ", tan( piOver3 ) );
|
|
write();
|
|
write( "arcsin( sin( 60 degrees ) ): ", arcsinD( sinD( 60 ) ) );
|
|
write( "arccos( cos( 60 degrees ) ): ", arccosD( cosD( 60 ) ) );
|
|
write( "arctan( tan( 60 degrees ) ): ", arctanD( tanD( 60 ) ) );
|
|
|
|
end
|
|
|
|
end.
|