Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions baseconvert.com/ieee-754-floating-point.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ <h1>Base Convert: IEEE 754 Floating Point</h1>

<div class="conversions" ng-controller="ConversionController" is-human="track('human')">
<div ng-repeat="group in getBaseGroups()" class="js-only">
<h2 ng-if="group[0].group === '16'">16 bit &ndash; half</h2>
<h2 ng-if="group[0].group === '32'">32 bit &ndash; float</h2>
<h2 ng-if="group[0].group === '64'">64 bit &ndash; double</h2>
<div
Expand Down Expand Up @@ -101,6 +102,29 @@ <h2 ng-if="group[0].group === '64'">64 bit &ndash; double</h2>
</label>
</div>

<h2>16 bit &ndash; half</h2>

<div class="form-group base">
<label class="input-group">
<div class="input-group-addon">Decimal <small class="hidden-xs">(exact)</small></div>
<input class="form-control" readonly>
</label>
</div>

<div class="form-group base">
<label class="input-group">
<div class="input-group-addon">Binary</div>
<input class="form-control">
</label>
</div>

<div class="form-group base">
<label class="input-group">
<div class="input-group-addon">Hexadecimal</div>
<input class="form-control">
</label>
</div>

<h2>32 bit &ndash; float</h2>

<div class="form-group base">
Expand Down
17 changes: 17 additions & 0 deletions baseconvert.com/js/converter-init-ieee-754.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,23 @@ var initialBases = [
name: 'decimal',
group: 'dec',
},
{
id: 'dec16',
name: 'decimal',
explanation: 'exact',
group: '16',
readonly: true,
},
{
id: 'bin16',
name: 'binary',
group: '16',
},
{
id: 'hex16',
name: 'hexadecimal',
group: '16',
},
{
id: 'dec32',
name: 'decimal',
Expand Down
27 changes: 24 additions & 3 deletions src/ieee-754.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ function extIeee754() {
return new DataView(arr.buffer);
}

function numberToArr16(number) {
var arr = new Uint8Array(2);
var view = new DataView(arr.buffer);
view.setFloat16(0, +number);
return arr;
}

function numberToArr32(number) {
var arr = new Uint8Array(4);
var view = new DataView(arr.buffer);
Expand All @@ -53,7 +60,7 @@ function extIeee754() {

function getExactDec(number) {
return (
number === 0 && 1/number < 0
number === 0 && 1 / number < 0
? '-0'
: new converter.Big(
number.toString(16),
Expand All @@ -64,18 +71,22 @@ function extIeee754() {

function valid(base, number) {
if (number === undefined) {
return base === 'dec' || /^(dec|bin|hex)(32|64)$/.test(base);
return base === 'dec' || /^(dec|bin|hex)(16|32|64)$/.test(base);
}

number = normalize(number);

if (number) {
if (base === 'dec') {
return number === 'NaN' || !isNaN(+number);
} else if (base === 'bin16') {
return /^(0b)?[01]{16}$/i.test(number);
} else if (base === 'bin32') {
return /^(0b)?[01]{32}$/i.test(number);
} else if (base === 'bin64') {
return /^(0b)?[01]{64}$/i.test(number);
} else if (base === 'hex16') {
return /^(0x)?[0-9a-f]{4}$/i.test(number);
} else if (base === 'hex32') {
return /^(0x)?[0-9a-f]{8}$/i.test(number);
} else if (base === 'hex64') {
Expand All @@ -96,10 +107,14 @@ function extIeee754() {

if (fromBase === 'dec') {
return +number;
} else if (fromBase === 'bin16') {
return parseToView(8, 2, number).getFloat16(0);
} else if (fromBase === 'bin32') {
return parseToView(8, 2, number).getFloat32(0);
} else if (fromBase === 'bin64') {
return parseToView(8, 2, number).getFloat64(0);
} else if (fromBase === 'hex16') {
return parseToView(2, 16, number).getFloat16(0);
} else if (fromBase === 'hex32') {
return parseToView(2, 16, number).getFloat32(0);
} else if (fromBase === 'hex64') {
Expand All @@ -113,14 +128,20 @@ function extIeee754() {
} else {
number = +number;

if (toBase === 'dec32') {
if (toBase === 'dec16') {
return getExactDec(new DataView(numberToArr16(number).buffer).getFloat16(0));
} else if (toBase === 'dec32') {
return getExactDec(new DataView(numberToArr32(number).buffer).getFloat32(0));
} else if (toBase === 'dec64') {
return getExactDec(number);
} else if (toBase === 'bin16') {
return arrToBase(2, numberToArr16(number)).replace(/^(.)(.{5})(.+)$/, '$1 $2 $3');
} else if (toBase === 'bin32') {
return arrToBase(2, numberToArr32(number)).replace(/^(.)(.{8})(.+)$/, '$1 $2 $3');
} else if (toBase === 'bin64') {
return arrToBase(2, numberToArr64(number)).replace(/^(.)(.{11})(.+)$/, '$1 $2 $3');
} else if (toBase === 'hex16') {
return arrToBase(16, numberToArr16(number));
} else if (toBase === 'hex32') {
return arrToBase(16, numberToArr32(number));
} else if (toBase === 'hex64') {
Expand Down
Loading