pif_LongInt

by Popisfizzy
Double, triple, and quadruple-precision integers, both signed and unsigned.
ID:2079028
 
This post will be for posting changelogs of major and minor builds, in addition to providing links to posts for major changes.
Version b1.0.20160409.
Released April 9, 2016.

pif_LongInt Changelog
  • Initial beta release.
  • Implemented pif_Arithmetic protocol, which will be adapated to the pif_BigInt library and released publicly as a separate library when pif_BigInt goes public.
  • Implemented UnignedDouble class, which is an unsigned double-precision (32-bit) integer class.

pif_Arithmetic Protocol Changelog
  • Initial beta release.
Version b1.1.20160502.
Released May 5, 2016.
Release post here.
GitHub commit here.

pif_LongInt Changelog
  • Fixed several errors in computing remainders and quotients in division in the UnsignedDouble class.
  • Added more documentation to functions.
  • Made additions and modifications to the pif_Arithmetic protocol. Refer to below to see these changes.
  • Made rewrites to /UnsignedDouble.Remainder() and /UnsignedDouble.Divide(), significantly increasing their speeed. These modifications will "bubble" through to all other classes in the library, so the rewrite is highly-significant.
  • Implemented the SignedDouble class.
  • Fixed an oversight in Quotient() and Divide() that could sometimes result in the second block of a SignedDouble or UnsignedDouble from being overwritten when the object was not in NEW_OBJECT mode.

pif_Arithmetic Protocol Changelog
  • Added Release Notes and To Do sections to pif_Arithmetic.
  • Added FirstFirstSet() and FindLastSet() methods.
  • Changed Highest() and Lowest() to Maximum() and Minumum(), respectively.
  • Clarified the behavior of the PrintBinary(), PrintDecimal(), and PrintHexadecimal() methods.
  • Added notes about the relationship between Quotient() and Remainder().
  • Added note about the legal output values of Remainder().
  • Added a note about restrictions on the output of Divide().
  • Added notes on how the comparison methods should handle incoming data when it is "distinct" from the source object. Refer to those methods in the pif_Arithmetic protocol file for details.
  • Added a note on the behavior of Negate() for signed integer objects, and more specifically the largest negative number representable for a fixed-width signed integer.
  • Added the Zero() "static" method.
  • Added a /pif_Arithmetic/ProtocolNonConformingObjectException exception as well as a note where to use it in the GAAF format.
  • Added a /pif_Arithmetic/NonNumericInvalidPositionException exception as well as a note where to use it in the GAAF format.
  • Updated the GAAF format to provide more details on how a list of integers should interpreted, and especially a list of one integer.

Other Notes
  • Released source under the MIT license.
  • Officially made the GitHub repository public.
Version b1.1.0.20170724
Released July 24, 2017.

pif_LongInt Changelog
  • Renamed UnsignedDouble and SignedDouble to Unsigned32 and Signed32. This makes it clearer, in my opinion, what their precision is and this convention will be followed for all future classes.
  • "Emancipated" the Signed32 class from Unsigned32. That is, Signed32 was rewritten so that it is not a child of Unsigned32, and instead inherits directly from the pif_LongInt class. The approach of making Signed32 a child of Unsigned32 seemed a good idea originally, but in retrospect it is not as useful as it once seemed due to a realization I had regarding handling overflow exceptions. Furthermore, a Signed32 can not replace an Unsigned32 in a method and keep the same functionality, due to their significantly-different range and so it is also poor design. Doing it as a sister class of Unsigned32 involves copying more code, but it's a better way of doing it in the long run.
  • Fixed the joke /Signed32.PrintUnary() method so that it works correctly for negative numbers.
  • Fixed an bug with the Signed32 class that would result in it throwing an overflow exception in the cases when UnsignedDouble would have an overflow, even though the situations where signed and unsigned doubles overflow are very different.

Other Changes
  • You can now download the library directly from the hub, instead of having to download the zip. Thanks goes to Super Saiyan X for the membership, and so access again to my filespace.
  • The example code on my hub has been wrong for at least a year, due to a minor mistake in loop boundaries. Fixed now.
In response to Popisfizzy
Just a sub-minor version update, to address a small bug. You can see the bug report here.

Version b1.1.1.20170806
Released August 6, 2017.

pif_LongInt Changelog
  • Fixed a bug where calling the constructor with the single argument of null would cause the value of the object to be set to 65536 instead of 0. This was caused by a typo where I wrote a 1 in the code instead of a 0. Small errors in code...

    Thanks goes to Reformist for both finding this error and what was causing it.


Version b1.1.2.20171217
Released December 17, 2017.

pif_LongInt Changelog:
  • The library now supports the newly-implemented overloaded operators feature. This means that the integer classes can be used much more like BYOND's built in numeric types, without having to make explicit method calls. This change requires at least BYOND v512 to work.
  • Made the library compliant with the PIF_NOPREFIX_GENERAL preprocessor flag that's universal in my libraries, and added a specific PIF_NOPREFIX_LONGINT flag.
  • Added the ToFloat() method, which allows one to convert from a pif_LongInt object to BYOND's floating point number representation.
  • Added an "Introduction & Overview" section, which gives a brief description of how to use this library.
Version b1.2.2.20171227
Release December 27, 2017.

A minor note about the version number: Based on my numbering scheme, the last update should probably have been b1.2.1.20171217, so I'm skipping over this version number and jumping to the correct order. To be honest, b1.1.0.20170724 should probably have been b1.2.0.20170724 too, but oh well.

pif_LongInt Changelog
  • Fixed a bug that would result in empty arguments (except in constructors) would result in a runtime error. (report)
  • Fixed a bug in the operator-() method on the Signed32 class that would fail to return the proper result when doing negation (that is, when the operator-() method had no arguments). (report)
  • Changed the behavior of right bitshifting methods (BitshiftRight(), operator>>(), and operator>>=()) on the Signed32 class. Previously, the most significant bits were filled with 0's, while common behavior is to fill them with 1's if the number is negative so as to keep right bitshifts the same as integer division by two. The BitshiftRightRotate() method is not affected by this change. (report)
  • Implemented FindFirstSet(), FindLastSet(), CountLeadingZeros(), and CountTrailingZeros() on both Signed32 and Unsigned32.

pif_Arithmetic Changelog
  • Updated the specification on the FindFirstSet() and FindLastSet() methods.
  • Added CountLeadingZeros() and CountTrailingZeros() methods.
Version b1.2.3.20210718
Released July 18, 2021.
GitHub commit here.

pif_LongInt Changelog
  • Due to a typo and a missing return value for an overloaded operator, comparison operators would sometimes report incorrect results. (Multiverse7)
  • Implemented the := operator, introduced in v514. This allows the library to be used more transparently, because now a method does not need to be (explicitly) used to assign data into a LongInt object.
  • Updated the documentation to address the := operator.