Questions tagged «floating-point»

浮点数是实数的近似值,可以表示比整数大的范围,但使用相同的内存量,但代价是精度较低。如果您的问题是关于较小的算术错误(例如,为什么0.2 + 0.1等于0.300000001?)或十进制转换错误,请在发布前阅读下面链接的“信息”页面。




7
在16位,32位和64位IEEE-754系统中可以表示什么范围的数字?
我对浮点数的表示方式有些了解,但恐怕还不够。 普遍的问题是: 对于给定的精度(出于我的目的,以10为基数的精确小数位数),对于16位,32位和64位IEEE-754系统,可以表示什么数字范围? 具体来说,我只对精度为+/- 0.5(一个位)或+/- 0.0005(千个位)的16位和32位数字范围感兴趣。




7
浮点除法与浮点乘法
通过编码是否可以获得(非微优化)性能提升 float f1 = 200f / 2 比较 float f2 = 200f * 0.5 我的一位教授几年前告诉我,浮点除法比浮点乘法要慢,但没有详细说明为什么。 此声明适用于现代PC体系结构吗? 更新1 关于评论,请同时考虑以下情况: float f1; float f2 = 2 float f3 = 3; for( i =0 ; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide …

4
使C浮点字面量浮动(而不是双精度)
众所周知,在C中,浮点文字(例如1.23)具有type double。结果,任何涉及它们的计算都将提高一倍。 我正在一个嵌入式实时系统上工作,该系统的浮点单元仅支持单精度(float)数字。我所有的变量都是float,并且这种精度已经足够。我根本不需要(也负担不起)double。但是每次 if (x < 2.5) ... 写作中,灾难发生了:减速可能高达两个数量级。当然,直接的答案是写 if (x < 2.5f) ... 但这很容易错过(并且很难检测到为时已晚),尤其是当#define由缺乏纪律(或只是新手)的开发人员在单独的文件中输入“配置”值时。 因此,是否有一种方法可以强制编译器将所有(浮点数)文字视为float,就像带有后缀一样f?即使违反规范,我也不在乎。或其他解决方案?顺便说一下,编译器是gcc。

7
ValueError:无法将字符串转换为float:id
我正在运行以下python脚本: #!/usr/bin/python import os,sys from scipy import stats import numpy as np f=open('data2.txt', 'r').readlines() N=len(f)-1 for i in range(0,N): w=f[i].split() l1=w[1:8] l2=w[8:15] list1=[float(x) for x in l1] list2=[float(x) for x in l2] result=stats.ttest_ind(list1,list2) print result[1] 但是我得到了类似的错误: ValueError: could not convert string to float: id 我对此感到困惑。当我在交互式部分中仅尝试一行时,而不是使用脚本进行for循环时: >>> from scipy import stats …

3
为什么D中有0.1 + 0.2 == 0.3?
assert(0.1 + 0.2 != 0.3); // shall be true 是我最喜欢的一种语言使用本机浮点算法的检查。 C ++ #include <cstdio> int main() { printf("%d\n", (0.1 + 0.2 != 0.3)); return 0; } 输出: 1 http://ideone.com/ErBMd 蟒蛇 print(0.1 + 0.2 != 0.3) 输出: True http://ideone.com/TuKsd 其他例子 Java:http://ideone.com/EPO6X C#:http://ideone.com/s14tV 为什么D不正确?据了解,D使用本机浮点数。这是一个错误吗?他们是否使用某些特定的数字表示形式?还有吗 相当混乱。 d import std.stdio; void main() { writeln(0.1 …


4
将字符串转换为Haskell中的整数/浮点数?
data GroceryItem = CartItem ItemName Price Quantity | StockItem ItemName Price Quantity makeGroceryItem :: String -> Float -> Int -> GroceryItem makeGroceryItem name price quantity = CartItem name price quantity I want to create a `GroceryItem` when using a `String` or `[String]` createGroceryItem :: [String] -> GroceryItem createGroceryItem (a:b:c) = …


2
在MATLAB中,变量默认是否真的是双精度的?
这个问题是我进一步调查后发现的奇怪问题。 我一直都理解默认情况下MATLAB变量是双精度的。因此,如果我要进行一些操作,例如声明一个小数点后20位数字的变量: >> num = 2.71828182845904553488; >> class(num) % Display the variable type ans = double 我希望最后4位数字被忽略,因为浮点相对精度约为10 -16: >> eps(num) ans = 4.440892098500626e-016 如果我尝试显示小数点后的数字超过16位(使用fprintf或sprintf),那么我会看到: >> fprintf('%0.20f\n', num) 2.71828182845904550000 >> sprintf('%0.20f', num) ans = 2.71828182845904550000 换句话说,数字17到20均为0。 但是当我在Symbolic Toolbox中传递num给变量精度算术函数时,事情变得很奇怪,告诉它使用21位精度表示数字: >> vpa(num, 21) ans = 2.71828182845904553488 什么?!那些后四位数字又出现了!当我输入的原始数字存储为双精度变量时,它们不应该丢失num吗?由于num传递给时是一个双精度变量vpa,如何vpa知道它们是什么? 我对发生的事情的最佳猜测是,MATLAB内部表示的num精度比双精度要高,因为我将其初始化为比双精度变量可以处理的小数点后数字还多的数字。这真的是发生了什么,还是发生了其他事情? 奖励:如果您还没有上述偏头痛的话,这是另外一个困惑的来源... >> num = 2.71828182845904553488; …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.