powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вывести точное значение float'а?
13 сообщений из 13, страница 1 из 1
Как вывести точное значение float'а?
    #39986548
denbkh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть набор бит, нужно его сконвертировать во float и вывести точное значение. Как это сделать в Java?
Для примера, вот такой набор из 32-х бит "00111111100000000000000000000001" при записи во float представляет число 1.00000011920928955078125. Проверить, что это так, можно например на сайте https://www.h-schmidt.net/FloatConverter/IEEE754.html
Но, простым printf выводится совсем другое значение float'a.
Код: java
1.
2.
3.
int bits = Integer.parseInt("00111111100000000000000000000001", 2);
float fval = Float.intBitsToFloat(bits);
System.out.printf("%.23f", fval);


Такой код выводит 1.000000 1192092896 0000000. А мне нужно получить 1.000000 11920928955078125 . Как это сделать?
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39986572
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Float и "точное значение" - это оксюморон.
Возможно тут вы сможете найти ответ на свой вопрос
Еще есть предположение, что сам System.out.printf округляет значение.
Каково значение fval в отладчике?
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39986861
denbkh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой это не оксюморон, в стандарте IEEE 754 каждому значению набора бит во float'е соответсвует одно определённое число. Вот его и нужно вывести.
В отладчике показывает "1.0000001", но там просто используется Float.toString(), а он показывает приблизательно. Из документации к этому методу: "There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float."
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39986909
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно создать BigDecimal на основе float-а и его распечатать - должен получить нужное значение
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39986923
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denbkh
Никакой это не оксюморон, в стандарте IEEE 754 каждому значению набора бит во float'е соответсвует одно определённое число.
Не каждому. +0 и -0 - одинаковые числа, но разные битовые значения.
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39986925
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denbkh
Никакой это не оксюморон
Оксюморон - далеко не каждое рациональное число представимо конечной десятичной дробью.

P.S.
Судя по javadoc toString(fload) выводит разные строковые значения для разных битовых значений float. Необязательно точные, но разных для разных.
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987161
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WikiЧисла одинарной точности с плавающей запятой эквивалентны по точности числу с 7-8 значащими десятичными цифрами (в среднем 7,6)


denbkh

Такой код выводит 1.000000 1192092896 0000000.

Загибаем пальца:
1 = 1
1 = 2
9 = 3
2 = 4
0 = 5
9 = 6
2 = 7
8 = 8
9 = 9
6 = 10
Википедия обещала, что точность float 7-8 знаков, toString даже перестарался

denbkh

А мне нужно получить 1.000000 11920928955078125 . Как это сделать?

http://proglang.su/java/numbers-random
с помощью данной ф-ции можно получить float любой точность ))) хоть 100500 знаков после запятой )))
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987215
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще в плане точности 7-8 знаков, это больше похоже на эти цифры:
автор1. 00000011 920928955078125
Потому как это число равно 1 + 2 ^ -23 - минимальному ближайшему число после 1. Если надо точнее чем эти 8 цифр "00000011", то это уже сложно (ну если они не выражаются через степени двойки конечно)
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987226
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denbkh,
я думаю, что вам нужно представление чисел с плавающей точкой в двойчной системе
(обычно это идет в одной из первых глав учебников по CS)
посмотрите вот это (и именно английский вариант!)
https://en.wikipedia.org/wiki/Floating-point_arithmetic
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987308
denbkh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Можно создать BigDecimal на основе float-а и его распечатать - должен получить нужное значение

Спасибо, такой код
Код: java
1.
System.out.println(new BigDecimal(fval)); 


выводит нужное мне значение 1.00000011920928955078125!
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987310
denbkh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
denbkh
Никакой это не оксюморон
Оксюморон - далеко не каждое рациональное число представимо конечной десятичной дробью.

Это так, но значение float'ов исходя из формулы их вычисления судя по всему всегда конечны, т.е без дроби их можно записать за конечное количество цифр после запятой. Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;)
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987321
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denbkh
Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;)

Любое трансцендентное число.
Пи = 3.14159....
Е = 2.71828....
...
Рейтинг: 0 / 0
Как вывести точное значение float'а?
    #39987341
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
denbkh
Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;)

Любое трансцендентное число.
Пи = 3.14159....
Е = 2.71828....


Во float (и double) нельзя записать точно ни Пи, ни Е, ни даже 0.2
Так что Пи нельзя вывести, но его никогда не будет в компьютере.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вывести точное значение float'а?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]