Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function BigFloat (nbr, decimal) constructor
- {
- self.integer = ""
- self.decimal = ""
- if typeof(nbr) == "number" && is_undefined(decimal)
- {
- var int = floor(nbr)
- self.decimal = string(nbr - int)
- self.integer = string(int)
- }
- else
- {
- self.integer = string(nbr)
- if !is_undefined(decimal)
- self.decimal = string(decimal)
- }
- static AddStrings = function (a, b, carry = 0)
- {
- var result = "";
- while string_length(a) < string_length(b)
- a = "0" + a
- while string_length(b) < string_length(a)
- b = "0" + b
- // add from right to left
- for (var i = string_length(a); i > 0; i--)
- {
- var d1 = real(string_char_at(a, i))
- var d2 = real(string_char_at(b, i))
- var sum = d1 + d2 + carry;
- carry = floor(sum / 10);
- result = string(sum % 10) + result;
- }
- return
- {
- result,
- carry
- }
- }
- static Add = function (b)
- {
- if typeof(b) == "number"
- b = new BigFloat(b)
- var d1 = self.decimal;
- var d2 = b.decimal;
- var i1 = self.integer;
- var i2 = b.integer;
- // pad with zeros
- while string_length(d1) < string_length(d2)
- d1 += "0"
- while string_length(d2) < string_length(d1)
- d2 += "0"
- // add decimal parts from right to left
- var d_res = self.AddStrings(d1, d2)
- var decimal_part = d_res.result
- // now for the integer parts, with the carry from the previous decimal addition
- // pad them with LEADING zeros
- while string_length(i1) < string_length(i2)
- i1 = "0" + i1
- while string_length(i2) < string_length(i1)
- i2 = "0" + i2
- var i_res = self.AddStrings(i1, i2, d_res.carry)
- var integer_part = i_res.result
- if i_res.carry > 0
- integer_part = string(i_res.carry) + integer_part
- return new BigFloat(integer_part, decimal_part)
- }
- static ToString = function ()
- {
- return self.integer + "." + self.decimal
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement