| File: Common\RationalNumber.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.NLP\Microsoft.Extensions.AI.Evaluation.NLP.csproj (Microsoft.Extensions.AI.Evaluation.NLP) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; namespace Microsoft.Extensions.AI.Evaluation.NLP.Common; [DebuggerDisplay("{ToDebugString(),nq}")] internal readonly struct RationalNumber : IEquatable<RationalNumber> { public static readonly RationalNumber Zero = new(0, 1); public RationalNumber(int numerator, int denominator) { if (denominator == 0) { throw new DivideByZeroException("Denominator cannot be zero."); } Numerator = numerator; Denominator = denominator; } public int Numerator { get; } public int Denominator { get; } public double ToDouble() => (double)Numerator / Denominator; public string ToDebugString() => $"{Numerator}/{Denominator}"; public bool Equals(RationalNumber other) => other.Numerator == Numerator && other.Denominator == Denominator; public override bool Equals(object? obj) => obj is RationalNumber other && Equals(other); public override int GetHashCode() => HashCode.Combine(Numerator, Denominator); }