Вопрос

У меня проблема с C #. Быть точным с math.pow (). Если я попытаюсь рассчитать 15 ^ 14, то я получаю "29192926025390624". Но если я рассчитаю его с Wolfram Alpha I Get «29192926025390625». Как вы можете видеть, это только разница - 1 номер 1. Wolfram Alpha правильно правильно. Почему не C #? и как я могу это исправить, чтобы я мог получить правильное значение в C #? 7

Мой код довольно прост, так как я просто пытаюсь с твердыми примерами. Так что я делаю: Math.Pow(15,14); Это дает 29192926025390624. Отказ И не «29192926025390625», который является правильным ответом.

Ссылки: вольфрам Альфа

Это было полезно?

Решение

Math.Pow работает на типов плавающих точек, которые по определению неточность. Если вам нужны произвольные точные целыми числами, используйте произвольный точный целочисленный тип, такой как BigInteger структура. BigInteger также имеет Военнослужащий метод.

Другие советы

Математика Работает по удваиванию. Эта реализация с длинным получает правильный ответ:

Func<long, int, long> power = null;
power = (i, p) => p == 1 ? i : i*power(i, p - 1);
Console.WriteLine(power(15, 14));

Математика Работает по удваиванию. Удваивает 64 бит с плавающей точкой и имеет около 15-16 цифр точности в C #, И, следовательно, то, что вы видите, - это ошибка округления. Вот как работают числа плавающих точек.

Если вам нужна более точность, попробуйте использовать десятичная дробь. Отказ Это 128 бит и использует 10 в качестве основы. Это дает вам точное представление чисел до 28-29 важных цифр. Вы можете легко определить свой собственный метод POW для десятичных.

Если decimal недостаточно, обратиться к BigInteger, который был добавлен в .NET 4.

Math.pow () работает правильно, его проблема с двойным типом данных видеть это.

        double i = 29192926025390625;
        Console.WriteLine("{0}",i);//the result will be 29192926025390624.0

К сожалению, проверьте значение по точке останова; в вашей программе;

C # 'S Math. Повышает двойной, номер IEEE 754 стандартной плавающей запятой. У него всего 15 важных цифр:

http://msdn.microsoft.com/en-us/library/system.math.pow.aspx.http://math.byu.edu/~schow/work/ieefloatingpoint.htm.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top