Форум программистов, компьютерный форум, киберфорум
Наши страницы

Объясните ситуацию с integer, float и double. Выводится число на единицу меньше положенного - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выделение целой части first/second http://www.cyberforum.ru/cpp-beginners/thread1121730.html
Уже надо ехать в универ, а я сделал чужой вариант, программа простая, но уже надо ехать. Очень надеюсь на вашу помощь, буду очень признателен. Если я правильно понимаю задачу здесь примерно 10...
C++ Перевод из pascal в Visual C++ Добрый день! Не могли бы вы помочь мне в переводе с Pascal в Visual C++? Очень нужна ваша помощь Program TAB; users crt; var a,b,h1,h2,e,y,y0,y1,y2,t,x:real; begin clrscr; writeln('Задайте... http://www.cyberforum.ru/cpp-beginners/thread1121725.html
Компиляция нескольких файлов C++
Здравствуйте, есть программа состоящая из 4 cpp, необходимо ее собрать, попытался собрать с помощью MinGW(взял тут http://sourceforge.net/projects/mingw/files/), но получил кучу ошибок, хотя прога...
Сортировка элементов одномерного массива C++
Привет всем, помогите составить программу. Отсортировать в порядке убывания элементы массива Е(46), расположенные до первого отрицательного его элемента.
C++ Определить функции нахождения суммы и разности векторов http://www.cyberforum.ru/cpp-beginners/thread1121686.html
Здравствуйте, помогите составить программу. Определить функции нахождения суммы и разности векторов в трехмерном пространстве. Для векторов \vec{a},\vec{b},\vec{c},\vec{d}, координаты которых...
C++ Компилятор Visual C++ 2008 выдает ошибку Всем Привет! Компилятор Visual C++ 2008 выдает ошибку, помогите исправить пожалуйста. код ошибки: 1>Задача 2.cpp 1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\задача... подробнее

Показать сообщение отдельно
DrOffset
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
17.03.2014, 21:12
Цитата Сообщение от zss Посмотреть сообщение
что процессор ПК работает с числами double.
Вычисления на FPU в x86 могут иметь три варианта точности: 32, 64, (80 или 128) бит. Откуда вывод, что ПК работает именно с double? Точность согласно стандарта IEEE-754, выставляется флагом PC. Который, по-умолчанию, выставляет точность в максимальное значение, что уже противоречит тезису, если считать, что double - 64 бита. Отсюда закономерный вопрос: что вообще такое double с точки зрения ПК с учетом того, что стандарт С++ не регламентирует реализацию плавающей точки?

Точность плавающей точки теряется либо на понижающих преобразованиях, либо из-за особенностей представления, когда число не представимо в виде конечной двоичной дроби.

Вот я еще и примерчик накидал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//mingw 4.7.2 
 
//sizeof(float) == 4
extern float a1;
extern float b1;
 
//sizeof(double) == 8
extern double a2; // extern, чтобы подавить вычисление значения на этапе компиляции, переменные определены в другом файле
extern double b2;
 
void f1()
{
    b1 = a1 / 10;
}
 
void f2()
{
    b2 = a2 / 10;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
f1:
    fld DWORD PTR LC0
    fdivr   DWORD PTR _a1 ; адресуем двойное слово
    fstp    DWORD PTR _b1
    ret
f2:
    fld DWORD PTR LC0 ; заметим, что 10 все еще адресуется как двойное слово
    fdivr   QWORD PTR _a2 ; адресуем четверное слово
    fstp    QWORD PTR _b2
    ret
LC0:
    .long   1092616192 ; это 10
Никаких преобразований тут нет.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.