- 1
int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+105
int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;
Выделение из числа I цифры, стоящей на месте P с конца.
=>
i = 1234, p = 2, c => 2
Вычитать остаток перед делением...
Автор не тот же, который обнуляет биты перед сдвигом?
а касты там просто так чтоли стоят?
даже в паскале так можно :-P
тупекаст округляет вниз же
>pow(10, p);
и то и то - целые числа.
Float: 1; Double: 1
Float: 10; Double: 10
Float: 100; Double: 100
Float: 1000; Double: 1000
Float: 10000; Double: 10000
Float: 100000; Double: 100000
Float: 1000000; Double: 1000000
Float: 10000000; Double: 10000000
Float: 100000000; Double: 100000000
Float: 1000000000; Double: 1000000000
Float: 10000000000; Double: 10000000000
Float: 99999997952; Double: 100000000000
Float: 999999995904; Double: 1000000000000
Float: 9999999827968; Double: 10000000000000
Float: 100000000376832; Double: 100000000000000
Float: 999999986991104; Double: 1000000000000000
Float: 10000000272564224; Double: 10000000000000000
Float: 99999998430674944; Double: 100000000000000000
Float: 999999984306749440; Double: 1000000000000000000
Таким образом если мы используем double и кастуем 64битные числа вида pow(10, i) то всё будет ОК.
Но в общем случае (при использовании float, или при использовании бОльших чисел могут быть фэйлы).
Напомню, что будет ли целое число представлено точно в формате типа `double` зависит от ширины мантиссы двоичного представления данного числа. Если это представление помещается в мантиссу `double`- то все в порядке, а если нет - то представление будет неточным. С `1000.0` все хорошо. А вот с бОльшими числами, пусть даже "круглыми" с десятичной точки зрения, могут возникнуть проблемы. Я не проверял, на каком значении вида `10...0.0` они возникнут, т.е. может быть тут в этом плане все порядке (для разумных значений индекса `p` в случае, скажем, 64-битного `int`). Но тем не менее...
А в Аде уже запрещено.