我正在为C#中的DirectX 3D引擎开发数学库.我正在使用SlimDX,这是一个奇妙的拼凑和强大的库.SlimDX提供了相当多的数学类,但它们实际上是原生D3DX对象的包装器,所以虽然对象本身非常非常快,但我认为互操作不是因为我的托管C#代码优于它们.
我的具体问题与浮点比较有关.排序规范的方法是定义epsilon值,并将值与浮点值之间的差值进行比较以确定接近度,如下所示:
float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
return Math.Abs(a - b) < Epsilon
}
Run Code Online (Sandbox Code Playgroud)
函数调用开销会破坏实际的比较,所以这个简单的函数将在C++中内联,C#编译器会这样做吗?有没有办法告诉C#编译器我想要一个内联方法?
我已经使用过Atmel ATMEGA和ATTINY系列微控制器,并且认为它们相当不错.但我不太喜欢的一件事是它们(以及Microchip PIC uC系列)都是哈佛机器,这意味着我无法真正将外部存储器用于RAM或仅执行闪存.
虽然这种设计有明显的优势,但从技术上讲,使用AVR或PIC进行FORTH这样的操作非常困难.(我知道至少有一个实现,但它不像普通的FORTH那样工作,而且会很快耗尽闪存)
FORTH最初是为交互式机器控制类型系统创建的,需要很大的灵活性,因此Z80或6809之类的东西被用作控制程序执行的微控制器或RAM或其他存储设备.
有没有人知道von Neumman机器的AVR/PIC具有类似复杂性的当前设备(最好是在DIP封装中可用)?
当我更新它所绑定的属性时,我在更新时似乎遇到严重问题让我的WPF UI更新.这是我的视图模型类定义:
namespace WpfModel
{
class AppModel : INotifyPropertyChanged
{
private int _count = 7;
public int Count { get { return _count; }
set { _count = value; OnPropertyChanged("Count"); } }
public void Increment()
{
Count++;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string prop)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs("prop");
handler(this, e);
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
这与我在以下XAML中的简单UI绑定:
<Window x:Class="WpfModel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:WpfModel"
Title="WPF Data Model Demo" Height="128" Width="284" > …Run Code Online (Sandbox Code Playgroud) 时间换另一个问题.我正在为我的小型3D引擎项目编写MD2加载程序.在我的旧语言(C)中,我可以定义一个结构,然后从打开的文件中直接读取()到结构中.我有一个结构来保存MD2文件中的标题信息,如下所示:
[StructLayout(LayoutKind.Sequential)]
public struct MD2_Header
{
public int FourCC;
public int Version;
public int TextureWidth;
public int TextureHeight;
public int FrameSizeInBytes;
public int NbrTextures;
public int NbrVertices;
public int NbrTextureCoords;
public int NbrTriangles;
public int NbrOpenGLCmds;
public int NbrFrames;
public int TextureOffset;
public int TexCoordOffset;
public int TriangleOffset;
public int FrameOffset;
public int OpenGLCmdOffset;
public int EndOffset;
}
Run Code Online (Sandbox Code Playgroud)
在我的读者代码中,我想做的事情如下:
// Suck the MD2 header into a structure, it is 68 bytes long.
Classic.Util.MD2_Header md2hdr = new Classic.Util.MD2_Header();
md2hdr = reader.ReadBytes(sizeof(Classic.Util.MD2_Header)); …Run Code Online (Sandbox Code Playgroud) 当8086或8088首次上电时,处理器开始执行什么地址?我知道Z80从0开始,6809向FFFF寻找起始地址,但我经常想知道x86是如何开始的.
编辑:
这假设没有BIOS干预.IE如果我有自己的EEPROM启动,它应该放在RAM中以启动机器运行?
我最近读了这篇文章:现代硬件上的浮点与整数计算,并且对我自己的处理器在这个准基准上的性能感到好奇,所以我将代码的两个版本放在一起,一个在 C# 中,一个在 C++ 中(Visual Studio 2010 Express)并对它们进行了优化编译,看看会出现什么结果。我的 C# 版本的输出相当合理:
int add/sub: 350ms
int div/mul: 3469ms
float add/sub: 1007ms
float div/mul: 67493ms
double add/sub: 1914ms
double div/mul: 2766ms
Run Code Online (Sandbox Code Playgroud)
当我编译并运行 C++ 版本时,出现了一些完全不同的东西:
int add/sub: 210.653ms
int div/mul: 2946.58ms
float add/sub: 3022.58ms
float div/mul: 172931ms
double add/sub: 1007.63ms
double div/mul: 74171.9ms
Run Code Online (Sandbox Code Playgroud)
我预计会有一些性能差异,但不会这么大!我不明白为什么 C++ 中的除法/乘法比加法/减法慢得多,而托管 C# 版本更符合我的期望。该函数的C++版本代码如下:
template< typename T> void GenericTest(const char *typestring)
{
T v = 0;
T v0 = (T)((rand() % 256) / 16) + 1;
T v1 …Run Code Online (Sandbox Code Playgroud) 希望这是一个简单的问题,我在某处忽略了一些东西......
我在Windows 7 64位上的VS2010中编写VB.NET的东西.它似乎默认为32位目标构建,如何告诉它制作64位可执行文件?
我去了项目属性 - >编译器 - >高级,但没有看到任何选项.
哦,这是VS2010 Express,要清楚.
我有一个简单的UI,它在其应用程序模型中调用几个解析和处理例程,通过BackgroundWorkers异步执行它们的工作.当模型代码不起作用时,它会设置一些属性,解析和处理.我的UI中有两个矩形,我想根据这些bool是否设置来改变颜色.窗口DataContext设置为模型,消息列表和UI的其他部分工作正常,我似乎无法弄清楚如何表达我想在XAML中做什么.
这是我的矩形代码的示例:
<Rectangle Height="20" Name="ParsingLamp" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" Fill="Gray">
<Rectangle.Triggers>
<Trigger Property="{Binding Path=Parsing}" Value="true">
<Setter TargetName="ParsingLamp" Property="Fill" Value="LightGreen" />
</Trigger>
<Trigger Property="{Binding Path=Parsing}" Value="false">
<Setter TargetName="ParsingLamp" Property="Fill" Value="Brown" />
</Trigger>
</Rectangle.Triggers>
</Rectangle>
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,上面写着"填充成员无效,因为它没有质量类型名称."
也许触发器不是正确的方法来做我想要完成的事情?