IP Library Granted Patent US 7,237,228
Granted Patent B1
US 7,237,228 · App. 10/008,952 · Granted Jun 26, 2007

Arbitrary and expandable high-precision datatype and method of processing

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,237,228
App. No.
10/008,952
Granted
Jun 26, 2007
Kind
B1
Abstract

A method and apparatus for processing numerical values in a computer program. In various embodiments, the invention provides an arbitrary and expandable high-precision datatype. The datatype encapsulates large-integer data and associated operators. The large-integer data has runtime expandable precision, and the operations perform functions on large-integer data and system integer data in a manner that is functionally equivalent to corresponding language-provided integer operations. The language-provided integer operations are overloaded with the operations of the large-integer datatype, whereby a user is unburdened with special commands and syntax, and large-integer data is inter-operable with system integer data.

Claims (49)

1. A computer-implemented method for processing numerical values in a computer program executable on a computer system, comprising:

encapsulating in a large-integer datatype, large-integer data and associated large-integer operators, wherein the large-integer data has runtime expandable precision and maximum precision is limited only by system memory availability;

overloading language-provided arithmetic, logical, and type conversion operators with the large-integer operators that operate on large-integer variables in combination with other datatypes, and programmed usage of a variable of the large-integer datatype is equivalent to and interoperable with a variable of a system-defined integral datatype;

establishing a plurality of available storage nodes available for allocation to large-integer data;

allocating a subset of the plurality of available storage nodes for a large-integer variable, determining a number of storage nodes to be allocated as a function of a size of the large-integer variable, and storing in each node of the subset a subset of bit values that represent a numerical value in the allocated plurality of storage nodes and forming a linked list of the allocated plurality of storage nodes;

determining a total number of available storage nodes available for allocation to large-integer data; allocating memory for a first number of available storage nodes, responsive to the total number being less than first threshold value, and establishing the first number of available storage nodes; and

removing from the plurality of available storage nodes, responsive to the total number being greater than a second threshold value, a second number of storage nodes, and deallocating memory for the second number of storage nodes.

2. The method of claim 1 , further comprising converting a character string into large-integer data in response to a constant definition statement.

3. The method of claim 2 , further comprising converting large-integer data to and from a character string for input, output, and serialization.

4. The method of claim 1 , further comprising:

converting input data from language-provided input functions to large-integer data; and

converting large-integer data to a format compatible with language-provided output functions.

5. The method of claim 1 , further comprising allocating a selected number of bits for each storage node in response to a program-specified parameter.

6. The method of claim 1 , further comprising:

maintaining a set of available storage nodes that are not allocated to any large-integer variable;

allocating a storage node from the set of available storage nodes to a large-integer variable while performing a large-integer operation that generates a numerical value and stores the numerical value in the variable, if a number of bit values required to represent the numerical value exceeds storage available in storage nodes allocated to the large-integer variable; and

returning to the set of available storage nodes a storage node allocated to a large-integer variable while performing a large-integer operation that generates a numerical value for storage in the variable, if a number of bit values required to represent the numerical value is less than storage available in storage nodes allocated to the variable.

7. The method of claim 6 , further comprising overloading language-provided memory allocation and deallocation operators with large-integer operators that allocate and deallocate storage nodes.

8. The method of claim 1 , further comprising, responsive to a large-integer divide operation specifying an input dividend and divisor:

identifying a set of most-significant bits of the dividend and a set of least-significant bits of the dividend;

recursively performing a large-integer divide operation using the set of most-significant bits as the input dividend, and returning a quotient and a remainder;

finding a lower-part dividend as a function of the remainder and the set of least-significant bits;

recursively performing a large-integer divide operation using the lower-part dividend; and

concurrently solving for the quotient and the remainder.

9. The method of claim 8 , further comprising identifying an optimal set of most-significant bits of the dividend and a set of least-significant bits of the dividend as a function of a number of bits that represent the dividend and a number of bits that represent the divisor.

10. The method of claim 9 , further comprising identifying an optimal set of most-significant bits of the dividend and a set of least-significant bits of the dividend as a function of one-half a difference between the number of bits that represent the dividend and the number of bits that represent the divisor.

11. The method of claim 1 , further comprising emulating fixed-bit arithmetic on variables of the large-integer data type.

12. The method of claim 1 , further comprising transferring data associated with temporary variables of the large-integer datatype by moving pointers to the data.

13. The method of claim 1 , further comprising

encapsulating in a large-floating-point datatype, large-floating-point data and associated operators, wherein the large-floating-point data has runtime expandable precision and maximum precision is limited only by system memory availability; and

overloading language-provided arithmetic, logical, and type conversion operators for floating-point data with the large-floating-point datatype operators that operate on large-floating-point variables in combination with other datatypes, and programmed usage of a variable of the large-floating-point datatype is equivalent to and interoperable with a variable of a system-defined floating-point datatype.

14. The method of claim 1 , further comprising

encapsulating in a large-rational datatype, large-rational data and associated operators, wherein the large-rational data has runtime expandable precision and maximum precision is limited only by system memory availability; and

overloading language-provided arithmetic, logical, and type conversion operators for rational data with the large-rational datatype operators that operate on large-rational variables in combination with other datatypes, and programmed usage of a variable of the large-rational datatype is equivalent to and interoperable with a variable of a system-defined rational datatype.

15. An apparatus for processing numerical values in a computer program executable on a computer system, comprising:

means for encapsulating in a large-integer datatype, large-integer data and associated large-integer operators, wherein the large-integer data has runtime expandable precision and maximum precision is limited only by system memory availability;

means for overloading language-provided arithmetic, logical, and type conversion operators for integers with the large-integer datatype operators that operate on large-integer variables in combination with other datatypes, and programmed usage of a variable of the large-integer datatype is equivalent to and interoperable with a variable of a system-defined integral datatype;

means for establishing a plurality of allocable storage nodes available for allocation to large-integer data;

means for allocating, for a large-integer variable, a subset of the plurality of allocable storage nodes, determining a number of storage nodes to be allocated as a function of a size of the large-integer variable; and

means for storing in each node of the subset a subset of bit values that represent a numerical value in the allocated plurality of storage nodes and forming a linked list of the allocated plurality of storage nodes

means for determining a total number of available storage nodes available for allocation to large-integer data;

means for allocating memory for a first number of available storage nodes, responsive to the total number being less than first threshold value, and establishing the first number of available storage nodes; and

means for removing from the plurality of available storage nodes, responsive to the total number being greater than a second threshold value, a second number of storage nodes, and deallocating memory fro the second number of storage nodes.

16. The apparatus of claim 15 , further comprising

means for encapsulating in a large-floating-point datatype, large-floating-point data and associated operators, wherein the large-floating-point data has runtime expandable precision and maximum precision is limited only by system memory availability; and

means for overloading language-provided arithmetic, logical, and type conversion operators for floating-point data with the large-floating-point datatype operators that operate on large-floating-point variables in combination with other datatypes, and programmed usage of a variable of the large-floating-point datatype is equivalent to and interoperable with a variable of a system-defined floating-point datatype.

17. The apparatus of claim 15 , further comprising

means for encapsulating in a large-rational datatype, large-rational data and associated operators, wherein the large-rational data has runtime expandable precision and maximum precision is limited only by system memory availability; and

means for overloading language-provided arithmetic, logical, and type conversion operators for rational data with the large-rational datatype operators that operate on large-rational variables in combination with other datatypes, and programmed usage of a variable of the large-rational datatype is equivalent to and interoperable with a variable of a system-defined rational datatype.

Assignments (13)
RELEASE OF SECURITY INTEREST Recorded Oct 28, 2020
From: WELLS FARGO BANK, NATIONAL ASSOCIATION
To: UNISYS CORPORATION
Reel/Frame 054231/0496 →
RELEASE OF SECURITY INTEREST Recorded Nov 9, 2017
From: WELLS FARGO BANK, NATIONAL ASSOCIATION (SUCCESSOR TO GENERAL ELECTRIC CAPITAL CORPORATION)
To: UNISYS CORPORATION
Reel/Frame 044416/0358 →
SECURITY INTEREST Recorded Oct 6, 2017
From: UNISYS CORPORATION
To: JPMORGAN CHASE BANK, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 044144/0081 →
PATENT SECURITY AGREEMENT Recorded Apr 27, 2017
From: UNISYS CORPORATION
To: WELLS FARGO BANK, NATIONAL ASSOCIATION, AS COLLATERAL TRUSTEE
Reel/Frame 042354/0001 →
RELEASE OF SECURITY INTEREST Recorded Mar 26, 2013
From: DEUTSCHE BANK TRUST COMPANY AMERICAS, AS COLLATERAL TRUSTEE
To: UNISYS CORPORATION
Reel/Frame 030082/0545 →
RELEASE OF SECURITY INTEREST Recorded Mar 15, 2013
From: DEUTSCHE BANK TRUST COMPANY
To: UNISYS CORPORATION
Reel/Frame 030004/0619 →
SECURITY AGREEMENT Recorded Jun 27, 2011
From: UNISYS CORPORATION
To: GENERAL ELECTRIC CAPITAL CORPORATION, AS AGENT
Reel/Frame 026509/0001 →
PATENT SECURITY AGREEMENT (JUNIOR LIEN) Recorded Oct 13, 2009
From: UNISYS CORPORATION
To: DEUTSCHE BANK TRUST COMPANY AMERICAS, AS COLLATERAL TRUSTEE
Reel/Frame 023364/0098 →
PATENT SECURITY AGREEMENT (PRIORITY LIEN) Recorded Oct 12, 2009
From: UNISYS CORPORATION
To: DEUTSCHE BANK TRUST COMPANY AMERICAS, AS COLLATERAL TRUSTEE
Reel/Frame 023355/0001 →
RELEASE BY SECURED PARTY Recorded Sep 14, 2009
From: CITIBANK, N.A.
To: UNISYS CORPORATION; UNISYS HOLDING CORPORATION
Reel/Frame 023263/0631 →
RELEASE BY SECURED PARTY Recorded Jul 31, 2009
From: CITIBANK, N.A.
To: UNISYS CORPORATION; UNISYS HOLDING CORPORATION
Reel/Frame 023312/0044 →
SECURITY AGREEMENT Recorded Jun 20, 2006
From: UNISYS CORPORATION; UNISYS HOLDING CORPORATION
To: CITIBANK, N.A.
Reel/Frame 018003/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 6, 2001
From: WISE, ASHLEY K.
To: UNISYS CORPORATION
Reel/Frame 012370/0933 →