Строковые функции не хочется использовать. Думаю, они замедляют программу.
0.0001100110011001100110011- это начало двоичного представления очень простого в десятичной системе числа 0.1. Бесконечная периодическая дробь, которую в компьютере усекают. Интересующее Вас число знаков после запятой подсчитывается после перевода двоичного числа в десятичную систему счисления, в этом и состоит перевод в строку. Интересующее Вас свойство относится к параметрам строки, получаемой из компьютерного числа для показа людям. Можно, конечно, выдергивать из 8 байтов double по маске порядок, но, он дает положение первой значащей цифры, а Вам надо последнюю. Думаю, без перевода в строку никак нельзя. Еще о подводных камнях при использовании FPU для близких целей можно прочесть здесь https://habr.com/ru/post/537636/.
Часто требуемое для вывода результатов расчетов преобразование числа с «плавающей точкой» из формата IEEE-754 в текстовую строку в «научной» нотации (т.е. с показателем степени «E») не является совсем уж тривиальной задачей. В силу обстоятельств автору пришлось самостоятельно «изобретать велосипед» такого преобразования. Причем хотелось сделать...
но только если в конце числа стоит единица
Ну студент, пишет контрольную, во пристали к человеку )) На бирже studwork таких задач полно, а тут сам старается, молодец!
нет, дедушка Волчанский, не угадал.)
Через логарифм вот так
но только если в конце числа стоит единица
0.02 поделите на натуральный логарифм из 10 и выделите целую часть
0.02 поделите на натуральный логарифм из 10 и выделите целую часть
это шутка?
MathLog(10)=2.30
0.02/2.30= 0.00868589
Есть переменная.
Например:
double а=0.01;
Нужно написать функцию, которая считала бы количество знаков после запятой.
Строковые функции не хочется использовать. Думаю, они замедляют программу.
Через логарифм вот так
но только если в конце числа стоит единица
Работает и этот способ, но с оговоркой, что в старших разрядах нули, а младший разряд не более 3-х. Так что для 0.02 сойдет:
Работает и этот способ, но с оговоркой, что в старших разрядах нули, а младший разряд не более 3-х. Так что для 0.02 сойдет:
к сожалению, не подойдет.
в старших разрядах нули. но в младшем разряде может быть любая цифра. от 1 до 9.
0.02
0.0005
0.00000008
Мой вариант:
Есть переменная.
Например:
double а=0.02;
Нужно написать функцию, которая считала бы количество знаков после запятой.
Строковые функции не хочется использовать. Думаю, они замедляют программу.
такой вариант, но сочинил на ходу, не проверял с пристрастием
Кстати, никто не помнит, почему явное приведение к string обрубает 1 цифру?