abraxus 发表于 2022-7-6 22:15:24

使用PI和极坐标系

我讨厌它。。。只是有些事我做得不对
 
我在模块中定义了一个全局常数:
 
这应该是足够的有效数字,对吗?
 
我做了一些计算,然后比较数值
 
正如你在DIMS中看到的,他们是单打(他们过去是双打,我把他们改成单打,看看这是否能解决我的匹配问题,这就是为什么他们以d开头…我很懒…无论如何
 
我放一些调试的原因。因为我不敢相信事情没有按他们应该的那样匹配,四分之一必须匹配
 
调试。打印证明。。。因为这是调试的结果。打印
 
但是在这4种情况下,比较这些值的“if”语句从来都不是真的
 
因此,在调试窗口中,当代码在断点处停止时,我键入了这个(期望它是真的),但它不是
 
但它是假的
 
然后我试着
这是真的-我将单个值转换为字符串。。。现在它开始工作了。。。
 
我的意思是这很好,我成功了,但我不应该为了使它们在条件语句中测试为真而将相同的单个值转换为字符串。。有什么建议吗?
 
(是的,我意识到代码有点复杂,可以更高效地编写,但由于我遇到的问题,我想要很多易于调试的值来评估)

SEANT 发表于 2022-7-6 22:24:00

我认为坚持使用原生格式是明智的。如您所见,“Single”也有直接比较的问题,转换(双到单,单到字符串)有处理开销。
 
在所有编程语言中,比较Double表示相等都有一个相同的问题:看起来应该相等的并不总是这样。请参阅下面的示例函数,它比较双值。
 
5
 
另一方面,VBA的模函数(MOD)可能对角度添加有用。
 
注意上面代码块中的格式问题

Tyke 发表于 2022-7-6 22:31:22

我只能重复Sean所说的内容并推荐他的函数。我只使用从另一个值中减去的方法,看看它是否在给定的公差范围内。但是不要忘记使用差值的绝对值,否则会得到一些错误的结果。
 
我还将PI定义为“PI=4*ATN(1)”。我发现作为长数值项更容易记住。我用过一些非常精确的计算,从来没有发现定义会产生错误的结果。

abraxus 发表于 2022-7-6 22:44:18

这不是一个坏主意,肖特-我会调查一下-我只是昨晚很沮丧,因为时间已经很晚了,把它转换成字符串成功了,但是的,它确实让过程慢了一点
 
你能解释一下“VBA的模函数(MOD)”是什么意思吗?我对此不熟悉
 
再次感谢
 
小家伙,我从来没有想过要这样计算π。。。(那你就不能把它当作常数,如果它能解决问题,那也不是世界末日。)
 
我从13岁(现在44岁)起就把圆周率背到了10位数,但我也会考虑你的建议

abraxus 发表于 2022-7-6 22:49:59

哦,是的,我还没有尝试eval函数,而不是转换成字符串。。。我想这个周末我也会这样做,这应该会加快迭代的速度

SEANT 发表于 2022-7-6 22:55:30

哎呀。我想我忘了这条线索。
 
模运算符将两个数字相除,但仅返回部分余数。因此:
 
10 Mod 5将返回0
 
但是
 
10 Mod 3将返回1
 
 
对于角度:
 
全局常数pi=3.14159265459
 
全局常数2pi=pi*2
 
Ang1=pi/2’90度
 
Ang2=pi*1.75’315度
 
ANG加法=(Ang1+Ang2)Mod 2pi
 
Ang加法为45度

bsamc2000 发表于 2022-7-6 23:01:16

我认为最简单的方法是使用数学。PI常数。我会检查这个,但我不再使用VBA。我大部分时间都留在C#。

abraxus 发表于 2022-7-6 23:14:15

我有“math”对象,但里面没有“pi”。。。。
 
但这让我想知道,在数学对象中有SIN和COS以及ATN和TAN方法。。。这些函数比SIN()和COS()等函数慢还是快?我的意思是,这似乎是重复的努力,所以一定有区别,对吗?

bsamc2000 发表于 2022-7-6 23:17:08

我真的不确定哪个更快。就像我说的,我不再使用VBA了。你们有使用系统的PI选项吗。数学圆周率?
页: [1]
查看完整版本: 使用PI和极坐标系