HTML и CSS не так хороши в выполнении такого рода вещи с высотами. Они определенно больше о прокрутке вертикально через свободно плавную страницу. Я думаю, что JavaScript, вероятно, будет Вашей большей частью полного решения, как заявляет FryGuy.
Согласно действующему проекту стандарта C99 , приложение F, он должен быть двойным. Конечно, это предполагает, что ваши компиляторы соответствуют этой части стандарта.
Для C ++ я проверил черновик 0x и черновик стандарта 1998 года, но, похоже, ни один из них не указывает ничего о представлении, подобном этой части стандарта C99, кроме логического значения в numeric_limits, которое указывает, что IEEE 754 На этой платформе используется / IEC 559, как упоминает Джош Келли.
Очень немногие платформы не поддерживают IEEE 754, однако, как правило, разработка другого формата с плавающей запятой не окупается, поскольку IEEE 754 четко определен и работает довольно красиво - и если это поддерживается, то разумно предположить, что double действительно 64 бита (в конце концов, IEEE 754-1985 называет этот формат двойной точностью, так что это имеет смысл).
На случай, если double не является двойной точностью, добавьте проверку работоспособности, чтобы пользователи могли сообщать об этом, и вы могли обрабатывать эту платформу отдельно. Если платформа не поддерживает IEEE 754, вы все равно не получите этого представления, если не реализуете его самостоятельно.
Хотя я не знаю типа, который гарантирует определенный размер и формат, у вас есть несколько вариантов в C ++. Вы можете использовать заголовок
и его шаблон класса std :: numeric_limits
, чтобы узнать размер данного типа, std :: numeric_limits :: digits
сообщает вам количество бит в мантиссе, а std :: numeric_limits :: is_iec559
должен сказать вам, соответствует ли тип формату IEEE. (Пример кода, который управляет числами IEEE на битовом уровне, см. В шаблоне класса FloatingPoint в файле Google Test gtest-internal.h .)
Другой проблемой является представление чисел с плавающей запятой. Обычно это зависит от оборудования, на котором вы работаете (но не всегда). В большинстве систем используются стандарты IEEE 754 с плавающей запятой, но в других также могут быть свои собственные стандарты (например, компьютер VAX).
Описание IEEE 754 в Википедии http://en.wikipedia.org/ wiki / IEEE_754-2008
Насколько мне известно, нет никаких вариаций в float / double. Float всегда был 32-битным, а double - 64. Семантика с плавающей запятой довольно сложна, но в
#include <limits>
есть константы. Boost.numeric.bounds - более простой интерфейс, если вам не нужно все в std :: numeric_limits
К сожалению, это тоже не гарантируется. Вы должны проверить numeric_limits
в
.
Но опять же, я никогда не слышал о реализации, в которой double не было бы длиной 64 бита. Если бы вы хотели просто предположить, вам, вероятно, это сойдет с рук.
Одна из самых больших проблем с такими «типами фиксированной ширины» состоит в том, что их очень легко ошибиться. Вероятно, вам не нужно 32-битное целое число. В чем смысл? То, что вы хотели, - это целочисленный тип, который может хранить как минимум 1 >> 31. Это длинный int
. Для этого вам даже не нужен
.
Точно так же ваш язык сценариев может реализовать тип FP, который будет работать до тех пор, пока базовый C ++ float
будет не менее 32 бита. Обратите внимание, что это все еще не дает вам точного поведения. Я почти уверен, что C ++ не гарантирует -1.0 / -3.0 == 1.0 / 3.0