标签: ieee-754

数字 0 在二进制浮点数格式中是什么样子?

浮点格式 (IEEE) 有 32 位。第一个位用于符号,之后的 8 位用于有偏差的指数,最后的 23 位用于尾数。在这个尾数中,第一个 1(始终是 1)始终隐藏,这引出了我的问题:

数字 0 在这种格式中是什么样子的?因为如果指数为 0,则数字将始终为 1。加上尾数始终最小为 1,对吗?如果尾数中只有零,它将被视为“1.0”...

我真的不明白这个。

floating-point zero ieee-754

3
推荐指数
1
解决办法
7308
查看次数

在 AVX 中寻找绝对

在其中一个解决方案中,他/她发现AVX 向量的abs(inp)为,

__m256 符号位 = _mm256_set1_ps(-0.0f); __m256 inp_abs = _mm256_andnot_ps(sign_bit, inp);

其背后的逻辑是什么?

SSE/AVX:根据每个元素的最小和最大绝对值从两个 __m256 浮点向量中进行选择

floating-point ieee-754 avx absolute-value avx2

3
推荐指数
1
解决办法
846
查看次数

在浮点数的指数十六进制表示法中“p”代表什么

在十六进制表示法中,数字的40.0书写0x1.4000000000000p+5含义是(1 + 4/16) * 2\xe2\x81\xb5

\n

p代表什么?想必,选择这封信是有原因的。

\n

floating-point hex conventions notation ieee-754

3
推荐指数
1
解决办法
872
查看次数

如何在 C++ 中以浮点/双精度值表示无穷大?

正如cppreference所说:“在 IEEE 754(浮点数最常见的二进制表示形式)中,正无穷大是指数所有位均已设置且分数的所有位均已清除的值。”。我尝试了此代码片段,但没有看到指数位设置。我有什么地方说错了吗?

#include <iostream>
#include <limits>
#include <bitset>
#include <math.h>
using namespace std;
int main() {
    float a = 0b00000000000000000000000000000000;

    double b = std::numeric_limits<double>::infinity();
    bitset<64> x(b);

    cout<<x<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在控制台上打印 0000000000000000000000000000000000000000000000000000000000000000 。

c++ infinite ieee-754

3
推荐指数
1
解决办法
1353
查看次数

C:浮点运算的结果总是标准化的吗?

我对这些事情很好奇:

  1. C语言总是以标准化形式存储浮点数吗?(也就是说,是否始终应用归一化?)
  2. 这对于某些算术(加法、乘法)后获得的结果也适用吗?
  3. 它取决于语言还是硬件 - FPU?

如果您能引用任何来源,那将非常有帮助。我查看了 IEEE-754 文档,但无法找到有关实现的任何具体声明。

编辑:假设 IEEE-754 规范

c floating-point ieee-754

3
推荐指数
1
解决办法
544
查看次数

将浮点值舍入到最接近的 2 的幂

虽然对于如何查找整数或浮点数的下一个 2 次方的问题有很多答案,但对于查找数字的最接近的 2 的次方却没有那么多答案。

我已经实现了以下内容:

template <typename T>
static constexpr T round_pow2(T v) {
    if constexpr (std::is_floating_point_v<T>) {
        auto high = static_cast<unsigned long>(std::ceil(v));
        auto low  = static_cast<unsigned long>(std::floor(v));

        if (high == low) {
            return round_pow2<unsigned long>(high);
        } else {
            T a = static_cast<T>(round_pow2<unsigned long>(low));
            T b = static_cast<T>(round_pow2<unsigned long>(high));

            return std::abs(a - v) <= std::abs(b - v) ? a : b;
        }
    } else {
        T high = v - 1;

        for (T i = 1; i < static_cast<T>(sizeof(T)); …
Run Code Online (Sandbox Code Playgroud)

c++ ieee-754

3
推荐指数
1
解决办法
199
查看次数

精确复制浮点值的重复加法

是否有一种亚 O(n) 方法1可以在 IEEE 754 算术中复制浮点值的重复求和?

也就是说,是否有一种更快的方法可以精确复制以下伪代码的结果:

f64 notQuiteFMA(f64 acc, f64 f, bigint n) {
    for (bigint i = 0; i < n; i++) {
        acc = acc + f;
    }
    return acc;
}
Run Code Online (Sandbox Code Playgroud)

3

在实际算术中,答案很简单——return acc + f*n就足够了。然而,在有限精度下,答案要复杂得多。作为一个例子,请注意notQuiteFMA(0, 1, 1 << 256)大约是4 2^53,而不是人们期望的无限精度的 2^256。(这个例子还说明了为什么加快计算速度可能是可取的 - 计数到 2^256 是相当不切实际的。)

  1. 我知道这整个事情在技术上可以在 O(1) 时间5内完成,使用 2^128 条目查找表,每个条目都有一个 2^64 元素的数组;请忽略此类银河算法。acc(鸽巢原理 - 在进入循环之前,重复加法不能进行超过 2^64 步 - 因此“只需”为和的每个初始值存储整个前缀和最终循环中的步数f。)
  2. 给定当前舍入模式的位精确(至少忽略非信号 …

floating-point precision ieee-754

3
推荐指数
1
解决办法
131
查看次数

IEEE - 754 - 找到signbit,exponent,frac,normalized等

我接收一个8位十六进制数作为IEEE 754位浮点数,我想打印有关该数字的信息(signbit,expbits,fractbits,normalized,denormalized,infinity,zero,NAN)浮点应该是单个.

我读了一下比特移位,我想这就是我想这样做的原因吗?但是,我并非100%肯定.我知道符号位位于数字的最左侧位置.表示正面或负面.我将它移动多少才能找到每个?我只是继续转移它找到每一个?谁能解释我是如何找到每一个人的?

我会换1来找到标志吗?我会换8来得到指数吗?我会换23来获得压裂吗?

signbit应为零

expbits应该是128

fracbits应该是0x00000000我想......

如果是这样,我如何在转移后测试它?

这就是我到目前为止所拥有的

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    short wordOrder = 0x0100;

int HexNumber;

printf("Hex IEEE - 754\n");



    if(wordOrder == 0x0100)
    {
    printf("\nbyte order: big-endian\n");
    }
    else
    {
    printf("byte order: little-endian\n");
    }

printf("\n>");
scanf("%x", &HexNumber);
printf("\n%#x",HexNumber);




return 0;
    }
Run Code Online (Sandbox Code Playgroud)

我的输入(scanf)我想要的方式..

>40000000
0x40000000
Run Code Online (Sandbox Code Playgroud)

它正在做什么..

c c++ ieee-754

2
推荐指数
1
解决办法
3336
查看次数

如何使用Java将32位尾数(IEEE754)转换为十进制数?

我有这个例子:

0 10000101 00111100000000000000000

并希望将其转换为十进制数.

到目前为止,我已经有了获得指数部分的代码:

String[]hex={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
 String[]binary={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

String userInput="429E0000";
 String result="";
 for(int i=0;i<userInput.length();i++)
 {
  char temp=userInput.charAt(i);
  String temp2=""+temp+"";
  for(int j=0;j<hex.length;j++)
  {
   if(temp2.equalsIgnoreCase(hex[j]))
   {
    result=result+binary[j];
   }
  }
 }
 System.out.println(result);

    int exponent = Integer.parseInt(result.substring(1,9),2)-127;
    System.out.println(exponent);
Run Code Online (Sandbox Code Playgroud)

Java中是否有任何内置命令?

java ieee-754

2
推荐指数
1
解决办法
3723
查看次数

2
推荐指数
1
解决办法
212
查看次数