Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 12

Вывод чисел типа float. Переполнение мантисы

08.03.2018, 13:41. Показов 5431. Ответов 2

Студворк — интернет-сервис помощи студентам
Пишу:
C#
1
2
3
4
float f = 1.9999994f;
Console.WriteLine(f);
 
//Выводит 1.999999 без 4-ки
Затем меняю 4 на 5 в конце:
C#
1
2
3
4
float f = 1.9999995f;
Console.WriteLine(f);
 
//Выводит 2
Почему происходит "округление" до 2, если в памяти число 1.9999995 выглядет по IEEE 754 так:

Т.е. переполнение мантисы не происходит.

А переполняется она при числе 1.99999995 (на одну 9ку больше):


И почему пишут точность float 6-7 знаков если она всегда 7?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2018, 13:41
Ответы с готовыми решениями:

Ввод и вывод чисел типа float
Прошу объяснить, в чём ошибка в коде Хотел написать простенький код, но что-то не то с выводом результата :/ Прошу помочь :c

Почему не происходит переполнение переменной типа float?
1.Почему не происходит переполнение переменной overflow?Вернее происходит,но только после прибавления 1*10^32, не ранее.Ведь FLT_MAX...

Вывод чисел в ListBox из переменных типа float,int.
Подскажите простой метод вывода чисел из переменных в ListBox. Пробывал преобразовать переменную типа float с помощю функции fcvt(),а...

2
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,409
Записей в блоге: 14
08.03.2018, 14:15
Вы форматируете по умолчанию. Там за вас кто-то решил, сколько знаков надо выводить.
Не нравится - указываете нужное число. Но не больше максимума - бесполезно.

Добавлено через 20 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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);
    }
}
fb ff ff 3f
1.999999000
1.9999994
3ffffffb
Описатель формата обратного преобразования ("R").

Добавлено через 55 секунд
Цитата Сообщение от MyshleninSA Посмотреть сообщение
И почему пишут точность float 6-7 знаков если она всегда 7?
Врядли вы проверили абсолютно все варианты.

Добавлено через 2 минуты
Метод Single.ToString (String)
По умолчанию возвращаемое значение содержит только 7-знаковая точность хотя для внутренних целей поддерживается до 9 цифр. Если значение этого экземпляра имеет более 7 цифр ToString(String) возвращает PositiveInfinitySymbol или NegativeInfinitySymbol вместо ожидаемого числа. Если требуется более высокая точность указать format с спецификации формата «G9» всегда возвращается точность или «R», возвращается 7 цифр, если число может быть представлено с этой точностью или 9 цифр, если число может быть представлено только с наибольшей точностью.
1
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 12
08.03.2018, 15:09  [ТС]
Rius, Спасибо за развернутый ответ. Поставил описатель формата G9 и всё видно. Буду разбираться дальше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2018, 15:09
Помогаю со студенческими работами здесь

Отследить переполнение при делении float/float
Кто-нибудь, подскажите пжл, алгоритм деления float/float на ЯВУ.

Переполнение при перемножении чисел типа Variant
Вот так работает: Dim TotF As Long TotF = 15000000 А вот так выдаёт "переполнение": Dim TotF As Long TotF = 1500 * 10000 ...

Вывод типа данных float (способы)
Здравствуйте, есть одно задание, вывести число типа данных float так, как это число представлено в памяти, т.е. в бинорманом виде. ...

"Значение типа float* нельзя использовать для инициализации сущности типа float"
#include <math.h> #include<iostream> #include <iomanip> #include<conio.h> using namespace std; ...

Сделать вывод типа float в шаблоне вместо double
Здравствуйте,уважаемые пользователи.Недавно начал знакомится с шаблонами, и заметил одну вещь которая не дает мне покоя.Суть вот в чем,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru