2016-09-06 4 views
0

Есть ли способ или команда для увеличения логарифмического?
Так как я могу увеличивать Integer:Логарифмический приращение

int i = 0 
while (i < 100) 
{ 
    i++ 
} 

результат: 1, 2, 3 ..., 100

До сих пор я это делаю:

double i = 0; 
while (i < 100) 
{ 
    if (i >= 10) 
    { 
     i += 10; 
    } 
    else if (i >= 1 & i < 10) 
    { 
     i += 1; 
    } 
    else if (i >= 0.1 & i < 1) 
    { 
     i += 0.1; 
    } 
    else if (i < 0.1) 
    { 
     i += 0.01; 
    }   
} 

результат: 0,1, 0,2, 0,3 ... 1, 2, 3 .... 10, 20, 30 ... 100

При большем диапазоне от 0,001 до 1000 это затрудняет

Второй вопрос:
Если i = 0.05 и I приращение i += 0.01, то это результат 0.060000000000000005. Почему он увеличивает 0.010000000000000005, а не 0.01?

+1

Ваш второй вопрос связан с арифметикой с плавающей запятой. некоторые десятичные значения не могут быть точно представлены в двоичном формате, так как хранятся 'double' и' float'. – user1666620

+0

Двойное значение имеет до 15 десятичных цифр точности, хотя не более 17 цифр поддерживается внутри. Вместо этого используйте десятичный знак. https://msdn.microsoft.com/en-us/library/system.double%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – tym32167

+2

Что касается вашего второго вопроса: не используйте 'double' или 'float', но' decimal'. –

ответ

3

Вы можете сократить код с помощью двух для следующих циклов, оставить al if/elses и заменить их на Math.Pow. n определяет степень детализации (п^-2 = 0,01)

int n,m; 
for(n=-2 ; n < 3; n++) 
{ 
    for(m= 1 ; m < 10 ; m++) 
    { 
     Console.WriteLine(m * Math.Pow(10,n)); 
    } 
} 

Результат: 0,01, 0,02, 0,03, 0,04, 0,05, 0,06, 0,07, 0,08, 0,09, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 900

Смежные вопросы