Логарифм отрицательного значения не определен; разные языки / рамки обрабатывают это по-разному. Это решение для C #:
using System;
public class Test
{
public static bool gt( double a, double b ) {
return Double.IsNaN(Math.Log(b - a));
}
public static void report_gt( double a, double b) {
if( gt(a,b) )
Console.WriteLine("{0} is greater than {1}", a, b);
else
Console.WriteLine("{0} is less than or equal to {1}", a, b);
}
public static void Main()
{
Test.report_gt(-1, 0);
Test.report_gt(1, 0);
Test.report_gt(1, 2);
Test.report_gt(-1, -2);
}
}
Выход:
-1 is less than or equal to 0
1 is greater than 0
1 is less than or equal to 2
-1 is greater than -2
Аналогичное решение для C может использовать исключения с плавающей запятой. К сожалению, C ++ не выдает исключение для отрицательного аргумента в log2()
для хорошего решения try-catch в этом забавном конкурсе:).