Поскольку вы говорите, что код хорошо работает в Java (предположительно, с использованием Math.sqrt
), мы можем исключить комплексные числа. Стандартная библиотека Java не имеет типа данных комплексного числа;Вы могли бы использовать сторонний класс библиотеки или написать свой собственный, но трудно представить, что вы упустили бы это при попытке перевести код на Java. Я прихожу к выводу, что вычисление должно иметь результат с действительным номером.
Чтобы это было правдой, это должен быть случай, когда 0 math.log(s) отрицательна, что означает -2.0 * math.log(s)
положительно, и вычисление имеет действительное значение.
Таким образом, проблема, вероятно, в том, что s
имеет неправильное значение. Из истории редактирования я вижу, что значение s
вычисляется следующим образом:
v1 = 2.0 * random.randint(0,1) - 1.0
v2 = 2.0 * random.randint(0,1) - 1.0
s = v1*v1 + v2*v2
Здесь v1
и v2
- либо -1, либо 1, поскольку randint(0, 1)
генерирует либо0 или 1. В любом случае, v1*v1
и v2*v2
оба равны 1, и, следовательно, s
равен 2. Это не в области 0 Так что вам нужно вернуться кучебник и / или реализация Java, чтобы убедиться, что s
рассчитывается и используется правильно.