afan
发表于 2015-3-17 13:49:22
回复afan
当时觉得这头像有点逗就上传了,无意冒犯,望见谅
zldfsz 发表于 2015-3-17 13:38 http://www.autoitx.com/images/common/back.gif
干嘛强调 {:face (394):}话说 你这头像很好啊,挺适合你的…
zldfsz
发表于 2015-3-17 13:58:34
回复 16# afan
哈哈,A大还真是幽默
vuivui
发表于 2015-3-18 13:33:52
回复afan
哪里没问题了,不是和我那篇帖子里写的那个类似吗,只不过他加入了对负数情况的判断,下面是你 ...
zldfsz 发表于 2015-3-17 08:39 http://www.autoitx.com/images/common/back.gif
超过Int的取值范围了,看来我得发个取值范围的专题。
netegg
发表于 2015-3-18 16:29:48
回复 18# vuivui
你有病,而且不轻,得治
zxhou1
发表于 2015-3-19 11:26:13
{:face (332):}
vuivui
发表于 2015-3-19 13:10:28
回复vuivui
你有病,而且不轻,得治
netegg 发表于 2015-3-18 16:29 http://www.autoitx.com/images/common/back.gif
第一次在本论坛生气。
我哪句话说错了?难道我说超过取值范围错了?发现问题发个专题讨论一下错了?
是啊,对你这样的人是不需要的,因为都论坛元老了,08年注册的,发了6348个帖子了。
在本帖一上来,就来句“10 ^ $dig,先不管其他的,这一下就不知道有没有问题”,是啊,先不管其他的,这一下就体现出你元老的水平来了。
afan兄、zldfsz兄都是动手编代码进行测试,而且都是有质量有深度的,你呢?
就拿zldfsz兄提出的例子说话,你知道123456155321234567.12345678加上123.456数值不变吗(au332位测试)?
MsgBox(4096, "超过取值范围出错示例:", 123456155321234567.12345678==123456155321234567.12345678+123.456)
上面的代码结果是“TRUE”,你觉得对这个保留两位小数四舍五入有意义吗?
解决办法是超过取值范围四舍五入无意义的数直接给出原值就行了,这就要知道取值范围、二进制的原理,我说要讨论一下这个问题,你说我病了。
发帖多,论坛活跃,这对au3论坛是有利的,但有些人发些低质量的帖是会误导初学者的,甚至“出口成脏”更是会阻碍论坛发展的。
netegg
发表于 2015-3-19 19:02:18
本帖最后由 netegg 于 2015-3-19 21:34 编辑
回复 21# vuivui
大数计算不是没法解决,谁说的位数多不能计算,100!都照样全出来
不过,还是那个道理,10^100,au3能否算得出来,我还真没试过,不过math里有,_power(10,100)可以
下图是123456155321234567.12345678和123.456的加减乘除
说的是你用^这个运算符不是都适用,是有局限的,所以10^$dlg未必合适
netegg
发表于 2015-3-19 19:45:22
本帖最后由 netegg 于 2015-3-20 07:22 编辑
更何况,如果没记错==好像是字符串对比,前后都非空而且如果数字过长自动保留位数,岂不是变成true和true的比较了,返回当然是true
然后好好看看上面的对比,每一组第一行是运算名称,第二行是用+-*\,第三行是math udf里的函数
再说,只是就事论事,管它有没有实际意义,好比相对论,水星进动被证实前不是也没什么实际意义吗
另外你可以试试
MsgBox(4096, "超过取值范围出错示例:", 123456155321234567.12345678=123456155321234567.12345678+123.456)
或者这样
$string1 = '123456155321234567.12345678'
$string2 = String(Execute(123456155321234567.12345678+123.456))
MsgBox(4096, "超过取值范围出错示例:", $string1==$string2)
看看返回的是什么
netegg
发表于 2015-3-19 21:46:56
本帖最后由 netegg 于 2015-3-20 08:41 编辑
回复 21# vuivui
“你知道123456155321234567.12345678加上123.456数值不变吗(au332位测试)?”
这个我还真不知道,你自己测试过吗,用的语法是否正确,建议还是自己先确定了再说
多说一句,那和小数位数无关,不信的话
MsgBox(4096, "超过取值范围出错示例:", 10000000000000000000000000000==20000000000000000000000000000)
返回同样是true,不知道这个比较对于计算有没有意义?如果数字大没意义,是否可以直接写成1==2?
vuivui
发表于 2015-3-20 09:57:33
回复vuivui
大数计算不是没法解决,谁说的位数多不能计算,100!都照样全出来
不过,还是那个道理,10 ...
netegg 发表于 2015-3-19 19:02 http://www.autoitx.com/images/common/back.gif
谁跟你说位数多就不能计算?“10^100”au3怎么不能计算了?你都不测试不懂二进制计数原理,就哗哗哗发什么言?
你知道什么是信息量?内存提供一个数64位计数,最大整数只能是-9223372036854775807~9223372036854775807,如果是科学计数法,位数可以是很大,但小数的一部分超过内存提供的地址范围就位舍去,这就是123456155321234567.12345678加上123.456数值不变的原因。
现在讲的是au3,不要跟我扯其他的,数值范围跟cpu位数、系统的位数、编程语言、系统环境相关的,au3是c++编的,你要懂计数原理就得好好学学c语言数据原理。
netegg
发表于 2015-3-20 10:02:44
回复 25# vuivui
就是因为不扯其他的,所以我才会有此一问
邪恶海盗
发表于 2015-3-20 10:27:19
谁跟你说位数多就不能计算?“10^100”au3怎么不能计算了?你都不测试不懂二进制计数原理,就哗哗哗发 ...
vuivui 发表于 2015-3-20 09:57 http://www.autoitx.com/images/common/back.gif
"数值范围跟cpu位数、系统的位数、编程语言、系统环境相关的"
那么写程序就一定要严谨,这是个大问题,不能说某一程序只能在某一特定的电脑上运行结果才准确
邪恶海盗
发表于 2015-3-20 10:28:31
本帖最后由 邪恶海盗 于 2015-3-20 10:29 编辑
谁跟你说位数多就不能计算?“10^100”au3怎么不能计算了?你都不测试不懂二进制计数原理,就哗哗哗发 ...
vuivui 发表于 2015-3-20 09:57 http://www.autoitx.com/images/common/back.gif
"数值范围跟cpu位数、系统的位数、编程语言、系统环境相关的"
那么写程序就一定要严谨,这是个大问题,
如果写个程序只能在特定条件的电脑上运行结果才准确,那等于说没用,不如不写
vuivui
发表于 2015-3-20 10:32:21
更何况,如果没记错==好像是字符串对比,前后都非空而且如果数字过长自动保留位数,岂不是变成true和true的 ...
netegg 发表于 2015-3-19 19:45 http://www.autoitx.com/images/common/back.gif
au3会自动转换数据类型,并不是说就不讲究数据类型。用字符串去进行数字计算,你知道效率会降多少吗?会出多少错吗?
$string1 = '123456155321234567.12345678'
$string2 = String(Execute(123456155321234567.12345678))
MsgBox(4096, Execute(123456155321234567.12345678+123.456), $string1==$string2)
都是123456155321234567.12345678也不会相等的。
元老同志,数字跟字符串是不一样的,String(Execute(123456155321234567.12345678))是一个科学计数法数字转换后的字符串,会跟字符串"123456155321234567.12345678"相等吗?
还是一句话,好好学学编程基础知识,慎发言,不要误导初学者。
vuivui
发表于 2015-3-20 10:43:03
回复vuivui
“你知道123456155321234567.12345678加上123.456数值不变吗(au332位测试)?”
这个我还 ...
netegg 发表于 2015-3-19 21:46 http://www.autoitx.com/images/common/back.gif
MsgBox(4096, "超过取值范围出错示例:", 10000000000000000000000000000==20000000000000000000000000000)
大哥,超过9223372036854775807的数字都是9223372036854775807,能不相等吗?
给你补补知识吧:
au3最大整数是64位,也就是:
0111111111111111111111111111111111111111111111111111111111111111
第一位0意思是正数。