CS153/hw5/hw4programs/float_multiply.oat

52 lines
1 KiB
Text
Raw Normal View History

global float_len = 2;
int[] determine_shift(int[] float)
{
var dec = float[1];
var count = 0;
while(dec > 0)
{
var temp = float[0];
float[0] = temp << 1;
dec = dec >>> 1;
count = count + 1;
}
var list = new int[2];
list[0] = float[0] + float[1];
list[1] = count;
return list;
}
int[] multiply_floats(int[] f1, int[] f2)
{
var f1_shifted = determine_shift(f1);
var f2_shifted = determine_shift(f2);
var product = f1_shifted[0] * f2_shifted[0];
var num_left_shifts = f1_shifted[1] + f2_shifted[1];
var remainder = 0;
for(var i = 0; i < num_left_shifts; i=i+1;)
{
var lsb = product [&] 1;
var shifted_lsb = lsb << i;
product = product >>> 1;
remainder = remainder + shifted_lsb;
}
var ans = new int[2];
ans[0] = product;
ans[1] = remainder;
return ans;
}
int program(int argc, string[] argv)
{
var pi = new int[2];
pi[0] = 3;
pi[1] = 14159;
var diameter = new int[2];
diameter[0] = 20;
diameter[1] = 17;
var prod = multiply_floats(pi, diameter);
print_int(prod[0]);
print_string(".");
print_int(prod[1]);
return 0;
}