标签: bit-representation

如何在浮点运算和十进制中表示0.1

我试图更好地理解浮点运算,并且已经看到了"每个计算机科学家应该知道浮点算术的内容"的一些链接.

我还是不明白,一些怎么样0.10.5存储在花车和小数.

有人可以解释它是如何布局的记忆?

我知道浮子是两部分(即一个数字的东西).

c# floating-point double decimal bit-representation

11
推荐指数
1
解决办法
8965
查看次数

C++移动浮点位表示?

是否有符合C++标准的方法来确定编译时(或运行时,作为替代)的'float','double'和'long double'的结构?

如果我假设,std::numeric_limits< T >::is_iec559 == true并且std::numeric_limits< T >::radix == 2我怀疑可以通过以下规则:

  • 第一个X位是有效数.
  • 下一个Y位是指数.
  • 最后1位是符号位.

用下面的表达式模糊地说:

  • size_t num_significand_bits = std::numeric_limits< T >::digits;
  • size_t num_exponent_bits = log2( 2 * std::numeric_limits< T >::max_exponent );
  • size_t num_sign_bits = 1u;

除了我知道

  • std::numeric_limits< T >::digits 包括"整数位",无论格式是否实际明确表示它,所以我不知道如何以编程方式检测和调整.
  • 我猜std::numeric_limits< T >::max_exponent是永远的2^(num_exponent_bits)/2.

背景:我试图解决两个问题:

  • 设置/获取有效位中的哪些位.
  • 确定'long double'结尾的位置,所以我知道不要读取具有未初始化内存的隐式填充位.

c++ floating-point portability ieee-754 bit-representation

8
推荐指数
1
解决办法
2151
查看次数

舍入浮动与表示错误到最接近和正确的结果

我有一种情况,当Python中的经典表示错误开始成为一个问题:我需要它们用于Numpy中的Matrix操作,并且还不支持十进制类型.

你们都知道,如果我这样做,111.85 * 111.85我会得到,12510.422499999999但如果round(12510.422499999999, 4)我能得到正确的结果,那当然12510.4225.

但实际问题是:

  • 这轮会是一个好主意和一个好习惯吗?
  • 这适用于所有情况吗?有时小数位置,其中..999小数可能更多
  • 最后,如何获得适当的小数位数以用于所有可能值的回合?

python numpy bit-representation python-3.x

7
推荐指数
2
解决办法
301
查看次数

指向不同类型的指针可以有不同的二进制表示吗?

我想知道是否允许 C++ 实现以不同方式表示指向不同类型的指针。例如,如果我们有 4 字节大小/对齐int和 8 字节大小/对齐long,是否可以将指向int/ 的指针表示long为对象地址分别右移 2/3 位?这将有效地禁止将指向指针转换为指向long指针int

我问是因为[expr.reinterpret.cast/7]

对象指针可以显式转换为不同类型的对象指针。v对象指针类型的纯右值转换为对象指针类型“指向cv 的 指针T”时,结果为static_­cast<cv T*>(static_­cast<cv void*>(v))

[注7:将指向T1对象类型的“指向”类型的指针转​​换为“指向”T1类型的指针T2(其中T2是对象类型,对齐要求T2不比 更严格T1)并返回到其原始类型type 产生原始指针值。—尾注]

第一句暗示我们可以将指针转换为任意两种对象类型。但是,(非规范性)注释 7 中的移情文本表示对齐在这里也起到了一定的作用。(这就是为什么我想出了这个int-long上面的例子。)

c++ pointers language-lawyer bit-representation

7
推荐指数
1
解决办法
198
查看次数

如何检查 int 变量是否包含合法(非陷阱表示)值?

语境:

这主要是对另一个问题的跟进。OP 想猜测一个变量是否包含一个 int 值,我的第一个想法是在 C 中(如在 C++ 中)一个 int 变量只能包含一个 int 值。Eric Postpischil 提醒我,对于 int 类型,每个标准都允许使用陷阱表示......

当然,我知道大多数现代系统只使用整数的 2 补码表示,没有填充位,这意味着无法观察到陷阱表示。尽管如此,这两个标准似乎仍然允许有符号类型的 3 种表示形式:符号和幅度、一个补码和二进制补码。并且至少 C18 草案(n2310 6.2.6 类型表示)明确允许填充除字符以外的整数类型的位。

因此,在可能的填充位或非二进制补码符号表示的上下文中,int变量可能包含符合实现的陷阱值。有没有可靠的方法来确保 int 变量包含有效值?

c++ integer data-representation language-lawyer bit-representation

6
推荐指数
1
解决办法
174
查看次数

在Python中,我如何翻译*(1+(int*)&x)?

这个问题是一个跟进这一个.在Sun的数学库(在C中),表达式

*(1+(int*)&x)
Run Code Online (Sandbox Code Playgroud)

用于检索浮点数的高位字x.这里,OS假定为64位,具有little-endian表示.

我在想如何将上面的C表达式翻译成Python?这里的困难是如何翻译表达式中的'&'和'*'.顺便说一句,也许Python有一些内置函数可以检索浮点数的高位字?

c python floating-point bit-representation

4
推荐指数
1
解决办法
160
查看次数

双0.0是否总是在便携式C中完全表示?

是否可以在具有符合ANSI标准的C编译器的所有环境中使用以下代码?

double n = 0;
assert(n == 0);
Run Code Online (Sandbox Code Playgroud)

那么C++呢?

c c++ bit-representation inexact-arithmetic

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

为什么32字节哈希的长度是二进制的267位而不是256位?

给定您对某个字符串进行哈希处理以生成256位输出的原因,为什么二进制表示形式的长度不为256

package main

import (
    "fmt"
    "crypto/sha256"
)

func main() {
    s := "1"
    m := sha256.Sum256([]byte(s))
    fmt.Println(len(m))
    b := fmt.Sprintf("%b\n", m[:])

    fmt.Println(len(b))
}
Run Code Online (Sandbox Code Playgroud)

输出:

32 

267
Run Code Online (Sandbox Code Playgroud)

go bit-representation

-1
推荐指数
1
解决办法
57
查看次数