【发布时间】:2016-08-31 11:36:03
【问题描述】:
通常的方法和编程方法在负数除以负数方面存在异常,如下图所示。
当我用通常的语法将两个负数相除时,如何强制 C# 遵循分数概念?请不要建议我使用以下算法:
// 'num1' and 'num2' are the two numbers of 'int' data-type to be divided where Math.Abs(num1) > Math.Abs(num2)
if (num1<0 && num2<0) // both numbers are negative
Console.WriteLine(Math.Abs(num1)%Math.Abs(num2));
else
Console.WriteLine(num1%num2);
PS:请注意,在数学异常中不需要详细说明两个负数相除产生的两个答案。只是建议我一种强制 C# 遵循上述分数概念的方法(如果可能的话)。
PPS:解释为什么编程语言遵循正常的除法而不是分数概念也会有帮助:)
编辑:上面的 C# 方法图片的代码(适用于那些觉得图像难以阅读的人:))
// Tests to see C#'s return values for signed and unsigned "modular division"
Console.WriteLine("-10 MOD 3 = "+ ((-10)%(3))); // Displays -1 (as expected)
Console.WriteLine("10 MOD -3 = "+ ((10)%(-3))); // Displays 1 (as expected)
Console.WriteLine("10 MOD 3 = "+ ((10)%(3))); // Displays 1 (as expected)
Console.WriteLine("-10 MOD -3 = "+ ((-10)%(-3))); // Displays -1 (should have displayed a positive 1)
Console.WriteLine("-10 MOD -3 (with no brackets placed for numbers) = "+ (-10%-3)); // Same output as that of above statement i.e. -1
更新:考虑到 Stack Overflow 社区的意见,我相信任何编程语言都不能强制遵循“分数概念”。但是欢迎社区中的任何人就“为什么编程语言使用'除法'?”发表意见。问题。如果有人在不久的将来找到在 C# 中强制执行“分数概念”的方法,也请发布解决方案。谢谢。 :)
【问题讨论】:
-
能否将相关代码复制到问题中?图像很难阅读 - 特别是对于来自搜索引擎的未来读者。
-
为什么,不知道,可能是因为在 cpu 中移动位更容易。这可能会帮助你。 codeproject.com/Articles/9078/Fraction-class-in-C
-
@HimBromBeere 我会这样做的。
-
“分数概念” == 浮点数学。这要求至少有一个操作数是
float或double。如果它们是整数类型,那么你得到整数除法,没有分数。所以 1 / 2 = 0 和 1.0 / 2 = 0.5。您可以通过强制转换其中一个操作数 (double)1 / 2 = 0.5 来强制进行浮点除法 -
我看不懂手写图片,抱歉。
标签: c# math division modular-arithmetic