Skip to content

Latest commit

 

History

History
324 lines (240 loc) · 12.9 KB

CHANGELOG.md

File metadata and controls

324 lines (240 loc) · 12.9 KB

Change Log

[0.15.3] - 2024-05-12

Changed

  • num crate min required version is now 0.4.2

[0.15.2] - 2024-04-28

Added

  • GenericFraction ConstOne and ConstZero trait implementations (special thanks to Raimundo Saona, aka @saona-raimundo)

[0.15.1] - 2024-02-11

Added

  • "with-unicode" feature implementation to format (and parse) floats with Unicode characters (special thanks to @feefladder)

[0.15.0] - 2024-01-01

Added

  • GenericFraction try_from/try_into implementations for primitive types (u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, usize, isize, f32, f64)
  • GenericFraction try_from/try_into implementations for BigInt/BigUint ("with-bigint" feature)
  • GenericDecimal try_from/try_into implementations for primitive types (u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, usize, isize, f32, f64)
  • GenericDecimal try_from/try_into implementations for BigInt/BigUint ("with-bigint" feature)
  • Tests for all GenericDecimal ops (overloadable operators - std::ops)

Changed

  • GenericDecimal ops (overloadable operators) refactoring. Each operator is now implemented separately in its own module, allowing decoupled code with its own optimisations and tests.

Fixed

  • PartialOrd will now reuse Ord implementation where possible (refactor to make clippy happier)
  • Fixed logic in sub_assign and checked_sub that could sometimes produce incorrect results for a couple of edge cases with a negative zero (-0) as an operand.

[0.14.0] - 2023-09-27

Added

  • approx module with "Approximate mathematical operations", fn sqrt (special thanks to @squ1dd13 for the contribution!)
  • with-approx feature, enabling the approx module

[0.13.1] - 2023-02-25

Added

  • Clippy hint to allow manual filtering in GenericFraction::to_i64 implementation
  • A couple of tests for floor/ceil functions

Fixed

  • ceil & floor incorrect behaviour for negative numbers (special thanks to Morris Hansing aka morri2)

[0.13.0] - 2023-01-01

Changed

  • PartialCmp now compares NaN with the other values and returns it as the smallest possible value. Thus, NaN < -Inf.

Fixed

  • partial_cmp now behaves exactly the same as cmp (PartialOrd is now consistent with Ord). This fixes an issue introduced in 0.12.2 with the implementation of Ord, where Ord would behave differently from PartialOrd with NaN values. Special thanks to Hsingai Tigris Altaica aka DrAlta for fixing this.

[0.12.2] - 2022-12-04

Added

  • Ord trait implementation for GenericFraction and GenericDecimal (special thanks to Hsingai Tigris Altaica aka DrAlta)

[0.12.1] - 2022-10-18

Added

  • Support to add castable values (e.g. f + 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to sub castable values (e.g. f - 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to div castable values (e.g. f / 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to mul castable values (e.g. f * 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to add_assign castable values (e.g. f += 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to sub_assign castable values (e.g. f -= 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to div_assign castable values (e.g. f /= 1u8, 1u8 will be transparently casted to Fraction with .into())
  • Support to mul_assign castable values (e.g. f *= 1u8, 1u8 will be transparently casted to Fraction with .into())

Changed

  • Refactoring of the fraction module. std::ops implementations moved into separate submodules.
  • generic::read_generic_integer performance improved for when target type matches source (~83% improvement, which is 5 times faster). As the result this can affect GenericFraction::from performance for non-float types.
  • From<(A, B)> implementation is migrated to GenericFraction::new_generic (~85% performance improvement and with no heap allocations, which is ~7 times faster).

[0.12.0] - 2022-10-13

Changed

  • num version 0.4 is now required (0.2, 0.3 are no longer supported)
  • Multiple functions made const in GenericFraction, GenericDecimal and fraction::display::Format Special thanks to Stijn Frishert (aka stijnfrishert).

Deprecated

  • fn decimal::GenericDecimal::apply_ref is deprecated.

Removed

  • Removed deprecated fn decimal::GenericDecimal::from_decimal_str. Use FromStr::from_str instead.
  • Removed deprecated fn fraction::GenericFraction::from_decimal_str. Use FromStr::from_str instead.
  • Removed deprecated fn fraction::GenericFraction::format_as_decimal. Use format!(\"{:.1$}\", fraction, precision) instead.
  • Removed deprecated fn fraction::GenericFraction::new_raw_neg. Use new_raw_signed instead.

[0.11.2] - 2022-09-18

  • DynaInt now implements serde Serialize & Unserialize (Thanks to Richard Davies aka @optevo for the contribution!)

[0.11.1] - 2022-08-07

Fixed

  • Fraction::from_str trims trailing zeroes before calculating denom (Thanks to @khigia for the contribution!)

[0.11.0] - 2022-06-19

Changed

  • num dependency versions extended from 0.2 to >=0.2,<5 (Thanks to Joel Natividad aka jqnatividad for the contribution!)
  • lazy_static dependency versions extended from 1.1 to 1

[0.10.0] - 2022-02-07

Added

  • std::str::FromStr trait implementation for GenericFraction and GenericDecimal Special thanks to Scott Wilson for the contribution
  • Deprecated GenericFraction::from_decimal_str and GenericDecimal::from_decimal_str in favour of of std::str::FromStr

[0.9.0] - 2021-08-22

Added

  • Default trait implementation for GenericFraction and GenericDecimal
  • postgres-types: ^0.2 and bytes: 1 are new optional dependencies (feature: with-postgres-support)
  • GenericFraction::new_raw_signed constructor

Changed

  • Juniper supported version upgraded from 0.11 to 0.15
  • Postgres supported version upgraded from 0.15 to 0.19 (might be down to 0.16, but untested).

Removed

  • postgres crate is not a dependency any longer
  • Deprecated fn GenericFraction::format_as_decimal is removed

[0.8.0] - 2020-12-17

Changed

  • More efficient f32/f64 conversion to Fractions and Decimals (up to 10 times faster and not using memory allocation anymore) Special thanks to Christopher Rabotin for the contribution!

[0.7.0] - 2020-12-05

Added

  • fraction::display::Format implements Clone trait (becomes cloneable)
  • fraction::Sign implements PartialOrd and Ord traits (becomes orderable)
  • GenericDecimal::calc_precision max_precision optional argument to limit the calculation

Changed

  • Decimal::from_fraction now limits precision calculation to 255
  • rustfmt for the whole codebase
  • small readability refactoring for some methods

[0.6.3] - 2020-05-07

Added

  • std::iter::{Sum, Product} implemented for GenericFraction and GenericDecimal

[0.6.2] - 2019-05-20

Addad

  • std::error::Error implemented for error::ParseError

[0.6.1] - 2019-03-29

Added

  • dynaint, Into<BigUint> implementation
  • fraction, GenericFraction::into_fraction<I> method implementation

[0.6.0] - 2019-02-05

Added

  • division::divide_to_callback implementation. Some other functions refactored to be using it internally
  • fraction::display module implementation, Fraction ::std::fmt::Display implementation supporting all the features of the std::fmt::Formatter
  • Decimal ::std::fmt::Display implementation supporting all the features of the std::fmt::Formatter

Changed

  • Juniper updated to 0.11
  • GenericFraction::format_as_decimal is now deprecated. Use format! macro instead, or division module if you need more control
  • division module functions signatures now have flags for trailing zeroes

Removed

  • Deprecated functions

[0.5.0] - 2018-11-26

Changed

  • Division module API; functions to return division state for later reuse (remainder and divisor)

[0.4.1] - 2018-10-19

Added

  • DynaInt, initial std::fmt::Display implementation

[0.4.0] - 2018-10-10

Bugs

  • Hash implementation for GenericFraction now returns equal hashes for negative and positive zeroes

Added

  • Lossless division, fraction decimal representation with infinite precision
  • Decimal type, built on top of Fraction
  • PostgreSQL integration
  • Juniper integration
  • Types with dynamic growth into heap on overflow
  • Generic integer conversions (usize -> i8, i8 -> u8, etc)
  • Examples and documentation for new features
  • Re-exporting the bunch of num traits so that the library can be used without explicit dependency on num

Refactoring

  • The lib has been split into modules with separate features

Modules

  • convert module with traits for optimistic convesion
  • decimal module with GenericDecimal implementation, Juniper and PostgreSQL integration for it
  • division module with lossless infinite division implementation without memory allocation
  • dynaint module with DynaInt type implementation (dynamically growing integer)
  • error module with shared library error types
  • fraction module with GenericFraction implementation, Juniper and PostgreSQL integration for it
  • generic module with GenericInteger trait implementation, generic integer types conversion
  • prelude module with some predefined type aliases such as Fraction and Decimal
  • tests module with some tests

Features

  • with-bigint (default), integration with num::{BigInt, BigUint} types
  • with-decimal (default), GenericDecimal type implementation
  • with-dynaint (default), DynaInt type implementation
  • with-juniper-support, Juniper 0.10 integration
  • with-postgres-support, Postgres 0.15 integration

Changes

  • GenericFraction redundant methods deprecated: new_nan, new_inf, new_inf_neg, into_big, format_as_float

[0.3.7] - 2017-11-10

Bugs

  • Fix comparisons with negative numbers

[0.3.6] - 2017-07-27

Bugs

  • T in GenericFraction<T> is Clone + Integer from now onwards (thanks to Taryn Hill aka Phrohdoh)

[0.3.5] - 2017-04-17

Changed

  • num package dependency version updated from "0.1.36" to "0.1.37"

[0.3.4] - 2016-12-11

Bugs

  • fn _new now returns NaN for 0/0 (was Infinity before)
  • fn sign now returns values for GenericFraction::Infinite values too
  • fn neg_zero now returns zero with negative sign (was positive before)
  • fn recip now handles zero values gracefully (does not panic, returns Infinity)

Added

  • Lots of documentation

[0.3.3] - 2016-11-18

Refactoring

  • More efficient implementation of From<[unsigned ints]>
  • More generic implementation of From<BigInt>

[0.3.2] - 2016-11-13

Refactoring

  • Zero::is_zero to be used everywhere in math, rather than making new zero vals + comparing with them

Added

  • fn new_nan constructor
  • fn new_inf constructor
  • fn new_inf_neg constructor

[0.3.1] - 2016-11-12

Added

  • fn format_as_float implemented for GenericFraction<T> (it was only available for BigFraction before)

Changed

  • Into<T> to be used in bounds rather than From<N>, since it's more flexible (thanks to Alexander Altman for the patch)
  • number of bug fixes within fn format_as_float + test coverage

[0.3.0] - 2016-11-08

Added

  • From<(N, D)> generic implementation (through std::fmt::Display)

Changed

  • GenericFraction<T> copy semantic to be applied only when T: Clone
  • GenericFraction impl, constructors refactoring (new, new_raw)
  • num upgraded up to 0.1.36 (from 0.1.34)

Removed

  • fn new does not perform type casting through fmt::Display anymore (that functionality moved out as From<(N, D)>)

[0.2.2] - 2016-09-17

Added

  • impl From<num::BigInt> for BigFraction
  • impl From<num::BigUint> for BigFraction

[0.2.1] - 2016-08-28

Changed

  • Package description has been changed

[0.2.0] - 2016-08-28

Added

  • num crate is a dependency now
  • GenericFraction<T> implemented upon num::Ratio<T>
  • BigFraction implementation based on num::BigRational (using heap)
  • num::traits::Bounded trait implemented
  • fn min_positive_value implemented
  • num::traits::ToPrimitive trait implemented
  • num::traits::Signed trait implemented
  • From<f64> trait implementation now relies on format! macro instead of f64::fract
  • BigFraction struct using num::BigUint
  • fn format_as_float for BigFraction has been implemented

Changed

  • The codebase has been rewritten and the license has been changed from LGPL-3 to MIT/Apache2 dual
  • no more convertions into INFINITY on arithmetic overflows
  • fn to_f64 now returns Option<f64> instead of f64 (num::trait::ToPrimitive implementation)
  • From trait implementation uses fmt::Display from now on

Removed

  • fn unpack removed
  • std::cmp::Ord implementation removed in regard to NaN values

[0.1.0] - 2016-01-24

Added

  • Basic implementation