У вас может быть точность, но это зависит от того, что еще вы хотите сделать. Если вы поместите в консольном приложении:
double a = 1e-20;
Console.WriteLine(" a = {0}", a);
Console.WriteLine("1+a = {0}", 1+a);
decimal b = 1e-20M;
Console.WriteLine(" b = {0}", b);
Console.WriteLine("1+b = {0}", 1+b);
Вы получите
a = 1E-20
1+a = 1
b = 0,00000000000000000001
1+b = 1,00000000000000000001
Но обратите внимание, что Pow
функции, как и почти все в классе Math, только принимает двойники:
double Pow(double x, double y);
Таким образом, вы не можете взять синус десятичной дроби (иначе, переведя его в двойное)
Также см. this question.
http://stackoverflow.com/questions/566958/double-precision-problems-on-c-net –
Не существует значения 'double', которое равно 3,50000000000000000001. Самый близкий к этому номеру - 3,5. –