Энный корень небольшого числа возвращает неожиданный результат в C#

Повышение является, вероятно, лучшим выбором, однако если Вы желаете что-то, что это более автономно, и если это для использования с Windows (который кажется выполнимым, учитывая, что они - люди маловероятно для устанавливания Python), тогда можно использовать py2exe для создания DLL с точками входа, подходящими для COM-объектов. Можно тогда взаимодействовать через интерфейс с библиотекой через COM. (Очевидно, это нисколько не полезно как межплатформенное решение).

5
задан Peter Mortensen 26 November 2014 в 17:38
поделиться

3 ответа

I'm pretty sure the "exact code" you give doesn't compile.

MessageBox.Show(Math.Pow(1.07,(1/3).toString()));

The call to toString is at the wrong nesting level, needs to be ToString, and (1/3) is integer division, which is probably the real problem you're having. (1/3) is 0 and anything to the zeroth power is 1. You need to use (1.0/3.0) or (1d/3d) or ...

9
ответ дан 18 December 2019 в 06:12
поделиться

Перво-наперво: если это именно тот код, который вы используете, вероятно, что-то не так с вашим компилятором: -)

MessageBox.Show(Math.Pow(1.07,(1/3).toString()));

сначала оценит (1/3) .toString (), а затем попробуйте возвести 1,07 в степень этой строки.

Я думаю, вы имеете в виду:

MessageBox.Show(Math.Pow(1.07,(1/3)).ToString());

Что касается проблемы, (1/3) рассматривается как целочисленное деление, возвращающее 0 и n 0 равно 1 для всех значений n.

Вам нужно принудительно перевести его в режим деления с плавающей запятой, например, 1.0 / 3.0 .

3
ответ дан 18 December 2019 в 06:12
поделиться

C # обрабатывает 1 и 3 как целые числа, вам нужно сделать следующее:

Math.Pow(1.07,(1d/3d))

или

Math.Pow(1.07,(1.0/3.0))

Это на самом деле интересно, потому что неявное расширяющее преобразование заставляет вас совершить ошибку.

13
ответ дан 18 December 2019 в 06:12
поделиться