Есть несколько вопросов, связывающих здесь, поэтому лучше изложить некоторые подробности с примерами, особенно для начинающих.
Как указал MRAB в своем правильном ответе, выражение всегда вычисляется без какого-либо контекста, поэтому
0.12345678901234567890
- это плавающий литерал по умолчанию (одинарный), независимо от того, где он появляется. То же самое относится к числам с плавающей запятой в экспоненциальной форме
0.12345678901234567890E0
это также число точности по умолчанию.
Если вы хотите использовать константу двойной точности, можно использовать D
вместо E
в приведенной выше форме. Даже если такая константа двойной точности назначена переменной точности по умолчанию, она сначала обрабатывается как число двойной точности, а затем преобразуется в точность по умолчанию.
То, как вы используете в своем вопросе (с использованием добрых обозначений и нескольких добрых констант), является более общим и более современным, но принцип тот же.
0.12345678901234567890_sp
это число вида sp
и
0.12345678901234567890_dp
- это число типа dp
, и не имеет значения, где они появляются.
Как показывает ваш пример, речь идет не только о назначении. В строке
c = DBLE(0.12345678901234567890)
первое число 0.12345678901234567890
- точность по умолчанию. Затем он преобразуется в удвоенную точность на DBLE
, но это делается после того, как некоторые цифры уже потеряны. Затем этот новый номер двойной точности присваивается c
.