gpt4 book ai didi

c# - 乘长值的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:11 26 4
gpt4 key购买 nike

我需要找出两个分数中的哪个大于另一个。分数结构包含分子和分母的 long 值。

天真的方法如下:

try
{
checked
{
long a = fraction1.Numerator * fraction2.Denominator;
long b = fraction2.Numerator * fraction1.Denominator;
return a.CompareTo(b);
}
}
catch
{
throw new Exception("CompareTo failed");
}

这适用于多种情况,但通过为 ab 选择另一种数据类型,可以减少抛出异常的情况。

什么数据类型是一个好的选择(最好没有额外的库可供引用)? 十进制大整数?

最佳答案

我通过尝试执行十进制乘法解决了这个问题。并且只有(出于性能原因)如果失败,我才进行 BigInteger 乘法。寻找共同因素当然是事先完成的。

try
{
decimal a = (decimal)fraction1.Numerator * (decimal)fraction2.Denominator;
decimal b = (decimal)fraction2.Numerator * (decimal)fraction1.Denominator;
return a.CompareTo(b);
}
catch
{
BigInteger a = new BigInteger(fraction1.Numerator) * new BigInteger(fraction2.Denominator);
BigInteger b = new BigInteger(fraction2.Numerator) * new (fraction1.Denominator);
return a.CompareTo(b);
}

旁注:在这种情况下,我可以接受从 System.Numerics 引用 BigInteger,因为它随 .Net 4 一起提供。

关于c# - 乘长值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com