Вывод чисел типа float. Переполнение мантисы - C#
Формулировка задачи:
Пишу:
Затем меняю 4 на 5 в конце:
Почему происходит "округление" до 2, если в памяти число 1.9999995 выглядет по IEEE 754 так:
Т.е. переполнение мантисы не происходит.
А переполняется она при числе 1.99999995 (на одну 9ку больше):
И почему пишут точность float 6-7 знаков если она всегда 7?
float f = 1.9999994f; Console.WriteLine(f); //Выводит 1.999999 без 4-ки
float f = 1.9999995f; Console.WriteLine(f); //Выводит 2
Решение задачи: «Вывод чисел типа float. Переполнение мантисы»
textual
Листинг программы
using System; using System.Runtime.InteropServices; public class Program { [StructLayout(LayoutKind.Explicit)] struct ByteArray { [FieldOffset(0)] public UInt32 Integer; [FieldOffset(0)] public Single Floating; [FieldOffset(0)] public byte Byte0; [FieldOffset(1)] public byte Byte1; [FieldOffset(2)] public byte Byte2; [FieldOffset(3)] public byte Byte3; } public static void Main() { ByteArray b = new ByteArray(); b.Floating = 1.9999994f; Console.WriteLine("{0:x2} {1:x2} {2:x2} {3:x2}", b.Byte0, b.Byte1, b.Byte2, b.Byte3); Console.WriteLine("{0:f9}", b.Floating); Console.WriteLine("{0:r}", b.Floating); Console.WriteLine("{0:x4}", b.Integer); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д