Выполнение параметров метода Double & Float при вызове в C #

Вот небольшой фрагмент кода, при вызове которого он выводит 'double'. Почему? В чем причина этого. Почему он не печатает «плавать»?

class source
{

    static void Main()
    {
        Receiver r = new Receiver();


        r.Method1(1.1);
    }

}

class Receiver
{
    public virtual void Method1(double f) { Debug.Print("double"); }
    public virtual void Method1(float f) { Debug.Print("float"); }
}

ТИА

12.10.2009 22:14:27
получил, спасибо, ребята за просветление
SoftwareGeek 12.10.2009 22:24:46
это может также иметь дело с узким и расширяющимся преобразованием и быть безопасное по умолчанию в два раз
SoftwareGeek 12.10.2009 22:29:16
Причина, по которой «double» является значением по умолчанию, заключается в том, что (1) double намного, гораздо более точен, и (2) double почти никогда не медленнее, чем float, а иногда и быстрее. Почему это быстрее? Поскольку чип, который выполняет арифметику с плавающей запятой, почти всегда выполняет все внутренние операции в двойных числах; операции с числами с плавающей точкой должны преобразовывать числа с плавающей точкой в ​​двойники, выполнять операции с двойными числами, а затем возвращать их обратно на числа с плавающей точкой. Если вы не собираетесь выделять миллионы этих парней, вы почти наверняка НЕ ​​ограничивает память двойными значениями, поэтому используйте их вместо чисел с плавающей запятой.
Eric Lippert 13.10.2009 06:56:49
Круто, спасибо Эрику за понимание.
SoftwareGeek 13.10.2009 17:43:45
2 ОТВЕТА
РЕШЕНИЕ

Чтобы указать плавающий вызов, как это:

r.Method1(1.1f);

В противном случае он по умолчанию удвоится, как вы заметили.

Вот часть документации MSDN на двойном, которая объясняет почему:

По умолчанию действительный числовой литерал в правой части оператора присваивания рассматривается как двойной.

13
12.10.2009 22:17:48
@SoftwareGeek: floatлитерал 1.1f фактически представляет величину 9,227,469 * 2^(-23), поскольку все floatчисла должны быть представлены как степень, в два раза превышающая значение в диапазоне (0..2 ^ 24). doubleБуквальный 1.1 представляет собой фракцию, значение которого находится ближе к значению математического 11/10. Обратите внимание, что назначение двойных значений для чисел с плавающей точкой - вполне разумная вещь, которая не должна требовать преобразования типа (но требует). Назначение чисел с плавающей запятой является хитрым и должно потребовать типового (но не требует).
supercat 23.05.2012 21:01:22

double является типом по умолчанию для нецелых чисел. Таким образом, 1.1 - это двойное число, 1.1m - это десятичное число, а 1.1F - это число с плавающей точкой.

5
12.10.2009 22:19:15