标签: ieee-754

有可能将浮点数双倍往返到两个十进制整数并保真吗?

我试图辨别是否有可能将双精度IEEE浮点值分解为两个整数,并在以后以完全保真度重新组合它们.想象一下这样的事情:

double foo = <inputValue>;
double ipart = 0;
double fpart = modf(foo, &ipart);

int64_t intIPart = ipart;
int64_t intFPart = fpart * <someConstant>;

double bar = ((double)ipart) + ((double)intFPart) / <someConstant>;

assert(foo == bar);
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,任何64位数量都可以存储在128位中(即只存储文字位.)这里的目标是将整数部分和double的小数部分分解为整数表示(与API接口)其存储格式我无法控制)并在重新组合两个64位整数时返回一个精确的双精度数.

我对IEEE浮点有一个概念性的理解,我得到的是双精度存储base-2.我凭经验证明,采用上述方法,有时foo != bar甚至是非常大的值<someConstant>.我已经离开学校一段时间了,我不能完全理解这个循环,理解这是否可能给出不同的基础(或其他因素).

编辑:

我想这是在我的大脑中隐含/理解但未在此捕获:在这种情况下,我保证问题中双重的总体幅度将始终在+/- 2 ^ 63(和> 2 ^ -64)之内.根据这种理解,整数部分保证适合64位int类型,然后我的期望是小数精度为~16位,小数部分也应该很容易在64位int类型中表示.

c ieee-754

0
推荐指数
1
解决办法
482
查看次数

0
推荐指数
1
解决办法
1507
查看次数

如何使用IEEE-754浮点约定将十进制浮点数转换为64位十六进制

有没有使用IEEE-754浮点约定将十进制浮点数转换为64位十六进制的解决方案?

我有十进制4275451536,需要转换为IEEE-754十六进制,即41EFDAC6D2000000

这是一个在线转换器,但我需要用编程语言编写它.

如何使用Python做到这一点?

python floating-point decimal ieee-754

0
推荐指数
1
解决办法
1844
查看次数

为什么`0.4/2`等于'0.2`同时`0.6/3`等于`0.19999999999999998`在python中?

我知道这些是浮点分割.但为什么这两个公式表现不同?

我做了一些调查,结果使我更加困惑:

>>>0.9/3
0.3

>>>1.2/3
0.39999999999999997

>>>1.5/3
0.5
Run Code Online (Sandbox Code Playgroud)

这里用什么逻辑来决定结果是用小数点后一位打印还是更多?

PS:我用python3.4做了上面的实验.

python floating-point floating-accuracy ieee-754

0
推荐指数
2
解决办法
1238
查看次数

float128和double-double算法

我已经在Wikipedia中看到,某种程度上实现四精度的方法是使用双精度双精度算术,即使就位而言它的精度不完全相同:https : //en.wikipedia.org/wiki/Quadruple-precision_floating-point_format

在这种情况下,我们使用两个double来存储值。因此,我们进行了两次运算来计算结果,结果的每一倍进行一次运算。

在这种情况下,我们可以在每个双精度数上产生舍入误差,或者是避免这种误差的一种机制?

c++ floating-point ieee-754

0
推荐指数
1
解决办法
834
查看次数

如何将 32 位二进制转换为浮点数

我想在 python 中执行从 32 位二进制到浮点数的 IEEE 754 转换。

我试过这个

import struct

f = int('11000001101011000111101011100001', 2)
print struct.unpack('f', struct.pack('i', f))[0]
Run Code Online (Sandbox Code Playgroud)

但这不适用于带有负符号位的数字。

预期的输出应该是这样的:

bintofloat(11000001101011000111101011100001)
>>> -21.56
Run Code Online (Sandbox Code Playgroud)

python floating-point binary ieee-754

0
推荐指数
1
解决办法
6914
查看次数

我的IEEE 754浮点表示有什么问题?

我在作业中被要求代表IEEE 754表示中的十进制0.1.以下是我做的步骤:

在此输入图像描述

然而,在线转换器和堆栈交换的这个答案暗示不然.他们把这个解决方案:

s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 01111011 10011001100110011001101
Run Code Online (Sandbox Code Playgroud)

差异是右边的数字1.为什么不是1100,为什么是1101?

floating-point binary ieee-754

0
推荐指数
1
解决办法
1821
查看次数

根据IEEE 754,无法将字符串值转换为C#中的float

好吧,我有一个字符串值"1.36383E + 37",我希望根据IEEE 754转换为浮点类型.请参阅下面的代码:

        try
        {
            return float.Parse(val, NumberStyles.Float | NumberStyles.AllowThousands, cultureInfo);
        }
        catch (Exception ex)
        {
        }
Run Code Online (Sandbox Code Playgroud)

它无法解析该值并向我抛出"Value对于单个值来说太大或太小"的例外情况

任何帮助都会感激不尽.

c# string floating-point ieee-754

0
推荐指数
1
解决办法
64
查看次数

JavaScript 十六进制字符串到 IEEE-754 浮点数

我已经环顾 Stackoverflow 几天了,试图解决这个问题,并在 JsFiddle 中玩了一段时间,但到目前为止还没有运气。

这是我的问题:我收到一个包含多个值的 base64 编码字符串。无符号整数和浮点数。将 base64 解码为十六进制字符串很顺利。无符号整数也是如此。问题在于解码浮点数。

b76a40e9000000350a3d422d00000059e37c409a0000002f90003b6e00000000

这是我的数据,作为一个例子,使用前 32 位,是一个 IEE-754 浮点数,字节顺序1-0-3-2。所以这就是0xb76a40e9我所知道的7.30363941192626953125,当我们交换它时3-2-0-1它变成了0x40e9b76a。当我将此十六进制字符串放入https://www.h-schmidt.net/FloatConverter/IEEE754.html已确认的。

我的问题是,如果 javascript 中存在将十六进制 IEEE-754 浮点字符串转换为 javascript 浮点数的实现,我已经搜索了很长时间。JS 自己的 parseInt 将接受十六进制,但 parseFloat 出于某种原因不接受?

任何输入都将不胜感激,迄今为止人们制作的所有代码示例都产生了与我预期不同的数字。

javascript floating-point parsing hex ieee-754

0
推荐指数
1
解决办法
1374
查看次数

浮点定向舍入和优化

有以下代码在不同的舍入模式下计算相同的表达式:

#include <iostream>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
#define SIZE 8

double foo(double * a, double * b){
    double sum = 0.0;
    for(unsigned int i = 0; i < SIZE; i++) {
        sum+= b[i] / a[i];
    }
    return sum;
}

int main() {
    double a[]={127, 131, 137, 139, 149, 151, 157, 163};
    double b[SIZE];

    for(unsigned int i = 0; i < SIZE; i++){
        b[i] = i+1;
    }

    printf("to nearest:   %.18f \n", foo(a, b));

    fesetround(FE_TOWARDZERO);
    printf("toward zero:  %.18f \n", foo(a, …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point rounding ieee-754

0
推荐指数
1
解决办法
202
查看次数