ieee-754相关内容
对于 std::is_floating_point::value 为 true 的类型 T,C++ 标准是否在T 应该如何实现? 例如,T 是否必须遵循符号/尾数/指数表示?还是可以完全任意? 解决方案 来自N3337: [basic.fundamental/8]: 浮点类型共有三种:float、double 和 long double.double 类型至少提供与 fl
..
浮点是在 C 中定义的实现.因此没有任何保证. 我们的代码需要可移植,我们正在讨论是否可以在我们的协议中使用 IEEE754 浮点数.出于性能原因,如果我们在发送或接收数据时不必在定点格式之间来回转换,那就太好了. 虽然我知道平台和架构之间在 long 或 wchar_t 的大小方面可能存在差异.但我似乎找不到关于 float 和 double 的任何具体信息. 到目前为止,我发
..
我正在阅读 Java 语言规范中的浮点 NaN 值(我很无聊).32 位 float 具有这种位格式: seee eeee emmm mmmm mmmm mmmm mmmm mmmm s 是符号位,e 是指数位,m 是尾数位.NaN 值被编码为全 1 的指数,并且尾数位不全为 0(这将是 +/- 无穷大).这意味着有许多不同的可能 NaN 值(具有不同的 s 和 m 位值). 对此,JL
..
考虑以下 C++ 代码: double someZero = 0;std::cout
..
我想知道您是否可以帮助解释将整数转换为浮点数或将浮点数转换为整数的过程.对于我的课程,我们将仅使用位运算符来执行此操作,但我认为对从类型到类型的强制转换的深刻理解将在这个阶段帮助我更多. 据我目前所知,要使 int 变为浮点数,您必须将整数转换为二进制,通过找到有效数、指数和小数来标准化整数的值,然后从那里输出浮点值? 至于float转int,你得把值分成有效数、指数和小数,然后把上面
..
我正在看一本C书,讲的是浮点数的范围,作者给出了表格: 类型 最小正值 最大值 精度==== ===============================================浮点数 1.17549 x 10^-38 3.40282 x 10^38 6 位双 2.22507 x 10^-308 1.79769 x 10^308 15 位 我不知道最小正数列和最大值列中的数字是从哪里
..
我刚刚听说 iphone 不能在本机上做 double,从而使它们比常规浮动慢得多. 这是真的吗?证据? 我对此问题非常感兴趣,因为我的程序需要高精度计算,而我将不得不在速度上做出妥协. 解决方案 iPhone可以在硬件上进行单精度和双精度运算.在 1176(原始 iPhone 和 iPhone3G)上,它们以大致相同的速度运行,但您可以在缓存中容纳更多单精度数据.在 Cort
..
似乎 IEEE 754 标准将 16,777,214 个 32 位浮点值定义为 NaN,或所有可能值的 0.4%. 我想知道保留这么多有用值的理由是什么,而本质上只需要两个:一个用于信令,一个用于安静的 NaN. 对不起,如果这个问题很琐碎,我在互联网上找不到任何解释. 解决方案 IEEE-754 标准将 NaN 定义为指数中全为 1 且有效数非零的数字.有效数字中的最高位
..
x87 FPU 以使用内部 80 位精度模式而著称,这通常会导致跨编译器和机器产生意外且不可重现的结果.在我的搜索中在 .NET 上可重现的浮点数学,我发现 .NET(Microsoft 和 Mono)的两个主要实现都发出 SSE 指令,而不是 64 位模式下的 x87. SSE(2) 对 32 位浮点数使用严格的 32 位寄存器,对 64 位浮点数使用严格的 64 位寄存器.通过设置适当的
..
我正在将一些代码从 Matlab 移植到 C++. 在 Matlab 中 长格式D = 0.689655172413793(这是 1.0/1.45)E = 2600/天//我得到 E = 3.770000000000e+03 在 C++ 中 双 D = 0.68965517241379315;//(这是 1.0/1.45)双 E = 2600/D;//我得到 E = 3769.9999
..
我只是好奇,为什么在 IEEE-754 中任何非零浮点数除以零会产生无限值?从数学的角度来看,这是无稽之谈.所以我认为这个操作的正确结果是 NaN. 如果 x 是实数,则当 x=0 时未定义函数 f(x) = 1/x.例如,如果 IEEE-754 产生 NaN 值,则没有为任何负数定义函数 sqrt 和 sqrt(-1.0f).但是 1.0f/0 是 Inf. 但出于某种原因,IEEE
..
这个话题在 StackOverflow 上出现过很多次,但我相信这是一个新的尝试.是的,我已阅读 Bruce Dawson 的文章 和 每个计算机科学家都应该知道的浮点运算和这个不错的答案. 据我了解,在典型系统上比较浮点数是否相等时存在四个基本问题: 浮点计算不精确 a-b是否“小"取决于a和b 的规模ab 是否“小"取决于a 和b 的类型(例如float、double、long
..
我知道大多数小数都没有精确的浮点表示(浮点数学有问题吗?).p> 但我不明白为什么 4*0.1 可以很好地打印为 0.4,但 3*0.1 不是,当这两个值实际上都有丑陋的十进制表示: >>>3*0.10.30000000000000004>>>4*0.10.4>>>从十进制导入十进制>>>十进制(3*0.1)十进制('0.300000000000000004440892098500626161
..
我想问一个这个之后的问题定义检查编译器是否使用标准很好地回答了.但是,这仅适用于 C.有没有办法在 C++ 中做同样的事情? 我不希望将浮点类型转换为文本或使用一些相当复杂的转换函数.我只需要编译器检查.如果您知道此类兼容编译器的列表,请发布链接.没找到. 解决方案 其实你有一个更简单的方法可以在 C++ 中实现这一点.从 C++ 标准 18.2.1.1 开始,numeric_lim
..
有什么方法可以在 JS 中读取浮点值的字节吗?我需要将原始 FLOAT 或 DOUBLE 值写入我需要制作的某种二进制格式,那么有没有办法获得逐字节的 IEEE 754 表示?当然还有同样的写作问题. 解决方案 会这个片段帮忙? var parser = new BinaryParser,四十 = parser.encodeFloat(40.0,2,8),二十 = parser.enco
..
许多使用 IEEE 754 双精度数的编程语言都提供了一个库函数来将这些双精度数转换为字符串.比如C有sprintf,C++有stringstream,Java有Double.toString等 在内部,这些功能是如何实现的?也就是说,考虑到它们经常受到程序员选择的精度限制,他们使用什么算法将双精度转换为字符串表示? 谢谢! 解决方案 各种软件环境用来将浮点数转换为字符串表示的
..
isnormal() 参考页面说: 判断给定的浮点数 arg 是否正常,即是既不是零、次正规、无限,也不是 NaN. 很清楚数字为零、无限或 NaN 的含义.但它也说不正常.什么时候是次正规数? 解决方案 在IEEE754标准中,浮点数用二进制科学记数法表示,x = M × 2e.这里M是尾数,e是指数.在数学上,您始终可以选择指数,以便 1 ≤ M
..
我一直在试图找出原因,但我找不到.有人可以帮帮我吗? 看下面的例子. float f = 125.32f;System.out.println("f 的值 = " + f);双 d = (双) 125.32f;System.out.println("d 的值 = " + d); 这是输出: f 的值 = 125.32d 的值 = 125.31999969482422 解决方案 fl
..
我已阅读有关浮点的信息,并且我知道 NaN 可能是由运算产生的.但我不明白这些到底是什么概念.它们有什么区别? 在 C++ 编程过程中可以产生哪一个?作为程序员,我可以编写一个导致 sNaN 的程序吗? 解决方案 当操作导致安静的 NaN 时,在程序检查结果并看到 NaN 之前,没有任何迹象表明有任何异常.也就是说,如果浮点是在软件中实现的,那么在没有来自浮点单元 (FPU) 或库的
..
我在理解浮点类型的精度时遇到了问题.msdn 写入 6 到 9 位的精度.但我注意到精度取决于数字的大小: float smallNumber = 1.0000001f;Console.WriteLine(smallNumber);//1.0000001bigNumber = 100000001f;Console.WriteLine(bigNumber);//100000000 smallN
..